CustodyCollateralAndDocumen.../build/openapi.json

2960 lines
145 KiB
JSON
Raw Permalink Normal View History

2023-01-08 12:05:25 +00:00
{
"openapi": "3.0.2",
"info": {
"title": "Investment Account",
"version": "0.1.0",
"description": "# Investment Account Service Domain\n\nThis document describes the specification for dealing with **Investment Accounts**.\n\nInvestments are assets or items acquired with the goal of generating income or appreciation. Appreciation refers to an increase in the value of an asset over time. When an individual purchases a good as an investment, the intent is not to consume the good but rather to use it in the future to create wealth.\n\nAn investment always concerns the outlay of some capital today—time, effort, money, or an asset—in hopes of a greater payoff in the future than what was originally put in.\n\nThe investment account is the register of those investments. An investor may hold multiple investment accounts.\n\nIt is possible but unlikely that an investor has no investment accounts. \n\n## Holdings\n\nAn investment account can have holdings (assets / financial instruments). The number of holdings can vary from zero to many over a period of time.\n\n\n## References\n\n[BIAN Semantic API](https://bian.org/semantic-apis/investment-account/)\n\n[BIAN Github](https://github.com/bian-official/public/tree/main/release10.0.0/semantic-apis/oas3/yamls)\n\n\n# Naming standards\n\nThe following are naming standards used in the data models.\n\n* as_at : The date and time the resource was fetched from the system of record. It is not the time of data fetch\n* links : Links to resource, its parent and child resources\n* caption: A short description of the resource that can be displayed \n* description: A long description of the resource that can be displayed \n* status: An enumerated state value of the resource. Different resources can have different states\n \n\n",
"contact": {
"name": "Designer",
"url": "https://fake.investment.example.com",
"email": "designer@investment.example.com"
},
"license": {
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0"
}
},
"servers": [
{
"url": "https://{environment}.{domain}/investment-account/v1",
"description": "Cloud based API behind a gateway",
"variables": {
"environment": {
"default": "nonprod",
"description": "Non Production server"
},
"domain": {
"default": "fakedomain.lan"
}
}
},
{
"url": "http://localhost:8077/investment-account/v1",
"description": "Local server supporting testing of the API"
}
],
"paths": {
"/health": {
"summary": "Service domain health check",
"description": "This service is for the monitoring of the health of the service.",
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/health-model"
}
}
},
"description": "Healthy service domain"
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Service is unavailable"
},
"503": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/health-model"
}
}
},
"description": "Service error with reason"
}
},
"summary": "Service domain health",
"description": "Check on the health of a service"
}
},
"/register": {
"summary": "Register (create) a new investment account",
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/register-model"
}
}
},
"required": true
},
"tags": [
"Draft"
],
"responses": {
"102": {
"content": {
"application/json": {
"schema": {
"type": "string"
}
}
},
"description": "The investment account is in the process of being created"
},
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/investmentaccount-model"
}
}
},
"description": "Investment account created"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Bad request to create an investment account.\n\nReasons are included in the response. Some possibilities are:\n\n1. Entity is not eligible\n2. To many investment accounts already linkde to entity\n3. Insufficient information provided in register request\n4. Invalid data in the register request"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Not authorised to create an investment account using the service"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "The investor is ineligible to own the requested investment account\nor entitlement to create the resource is denied."
}
},
"summary": "Request to create a new investment account",
"description": "To create a new investment account, key information needs to be supplied so that the \ncorrect ownership of the investment account can be registered.\n\nThe registration of the new investment account can fail if the investor is not\neligible to own an investment account."
},
"parameters": [
{
"name": "X-CustomerID",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/investments/details": {
"get": {
"tags": [
"Draft"
],
"parameters": [
{
"name": "investorid",
"description": "",
"schema": {
"type": "string"
},
"in": "query"
},
{
"name": "X-CustomerId",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/investment-model"
}
}
},
"description": "Presents details about the investment accounts for an investor"
}
},
"summary": "Investment accounts"
}
},
"/investments/{investment_account_id}": {
"summary": "List all the investment holdings for an investment account.",
"description": "# Investment Account Holdings\n\nInvestment holdings are listed with basic details.\n\nFor large lists of investments holdings, the results can be paginated\n\n",
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/holdinglist-model"
}
}
},
"description": "A list of holdings for the investment account is returned."
},
"401": {
"description": "Not authorised to access holdings service"
},
"404": {
"description": "The requested investment account holdings are not found\nor not entited to access the holdings.\n\nPlease check the identtifier is correct and you are entitled to\naccess the holdings."
}
},
"summary": "List holdings linked to investment account."
},
"post": {
"requestBody": {
"description": "The request data is a holding model but the following attrbutes are ignored:\n\n* links\n* holding_id\n",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/holding-model"
}
}
},
"required": true
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/holding-model"
}
}
},
"description": "Holding created"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Holding information is incomplete or incorrect"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Attempt to create duplicate holding or not authorised to access"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Resource not found or not authorised to access it."
}
},
"summary": "Create a holding"
},
"parameters": [
{
"name": "investment_account_id",
"description": "Unique identifier for the investment account",
"schema": {
"type": "string"
},
"in": "path",
"required": true
},
{
"name": "X-CustomerId",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/investments/{investment_account_id}/holdings/{holding_id}": {
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/holding-model"
}
}
},
"description": "Holding detail information"
},
"404": {
"description": "Resource not found or not authorised to access"
}
},
"summary": "Fetch holding information"
},
"parameters": [
{
"name": "X-CustomerId",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
},
{
"name": "investment_account_id",
"schema": {
"type": "string"
},
"in": "path",
"required": true
},
{
"name": "holding_id",
"schema": {
"type": "string"
},
"in": "path",
"required": true
}
]
},
"/investments/{investment_account_id}/details": {
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/investmentaccount-model"
}
}
},
"description": "The investmenet account details"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Not authorised to access the investment account service"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "The requested investment account details are not found\nor not entited to access the details.\n\nPlease check the identtifier is correct and you are entitled to\naccess the details."
}
},
"summary": "Details on the investment account"
},
"parameters": [
{
"name": "investment_account_id",
"description": "Unique identifier for the investment account",
"schema": {
"type": "string"
},
"in": "path",
"required": true
},
{
"name": "X-CustomerID",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/status": {
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"description": "A customers statis"
}
},
"summary": "Retrieve a customer status"
},
"parameters": [
{
"name": "X-CustomerID",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/investments/": {
"summary": "Listing all entitled investment accounts",
"description": "Listing all investment accounts that the API\nconsumer has access to.\n\nNormally the lists the investment accounts for\na single investor (customer id)",
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/investmentaccountlist-model"
}
},
"examples": {
"Base sample": {
"value": {
"as_at": "2018-02-10T09:30Z",
"accounts": [
{
"customer_id": "1ecae42e-7c01-4602-b5cf-5fddc493cf15",
"investment_account_id": "adf34f73-c2fe-459f-805f-c45fea6b97fe",
"links": [
{
"href": "/investments/adf34f73-c2fe-459f-805f-c45fea6b97fe/details",
"rel": "self",
"operation": "GET",
"media_type": "application/json"
}
],
"settlement_account": {
"accountid": "a5b8705e-e72d-4810-bdcf-14a98318ba8a",
"name": "Trading account",
"bsb": "06052",
"account": "xxxx 8675",
"moo": 1
},
"hasReoccurring": true
},
{
"customer_id": "1ecae42e-7c01-4602-b5cf-5fddc493cf15",
"investment_account_id": "d40a04ee-ecf4-4fba-adc6-5d721a9c7f42",
"links": [
{
"href": "/investments/d40a04ee-ecf4-4fba-adc6-5d721a9c7f42/details",
"rel": "self",
"operation": "GET",
"media_type": "application/json"
}
],
"settlement_account": {
"accountid": "a5b8705e-e72d-4810-bdcf-14a98318ba8a",
"name": "Trading account",
"bsb": "06052",
"account": "xxxx 8675",
"moo": 1
},
"hasReoccurring": false
}
]
}
}
}
}
},
"description": "List of investment accounts\n\nIf the list is empty then either no investment accounts exists\nor you are not authorised to access them."
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
},
"examples": {
"Base sample": {
"value": {
"status_code": "some text",
"status": "some text",
"message": "some text"
}
}
}
}
},
"description": "Not authorised to list investment accounts service"
}
},
"summary": "List of investment accounts"
},
"parameters": [
{
"name": "X-CustomerID",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/search": {
"summary": "Search the investment account model",
"description": "# Investment Account Search\n\nThe search service allows consumers to locate records in the investment accouunt model.\n\nThe primary use case for search is to locate an investor and their investment accounts\nwhen only the customer identifier is known.\n\n## Scope\n\nThe search scope is investment accounts.\n\n## Example\n\nA simple example to find the account with COLES holding\n\n/search?q=COL\n\nWhich would return a list of holdings with the letters \"COL\", based on\nthe symbol.\n\nThe search is case insenstive",
"get": {
"tags": [
"Proposed"
],
"parameters": [
{
"name": "q",
"description": "Query request as a simple string. For example:\n\n\"/search?q=ETHI\" \n\nwill return only those resources with the matching symbol\n",
"schema": {
"type": "string"
},
"in": "query",
"required": true
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/searchresult-list"
},
"examples": {
"Base sample": {
"value": {
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"media_type": "some text",
"caption": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PUT",
"media_type": "some text",
"caption": "some text"
}
],
"searchIdentifier": "some text",
"resultGroup": "some text",
"meta": {
"total_records": 63,
"total_pages": 58,
"page_size": 6
},
"searchCategoryResults": [
{
"meta": {
"total_records": 40,
"total_pages": 49,
"page_size": 50
},
"code": "some text",
"name": "some text",
"caption": "some text",
"icon": "some text",
"order": 57,
"link": "some text",
"supportingData": {
"keyName": "some text",
"keyValue": "some text"
},
"searchItemResults": [
{
"link": "some text",
"category": "some text",
"icon": "some text",
"caption": "some text",
"itemId": "some text",
"order": 81,
"enhancedText": "some text"
},
{
"link": "some text",
"category": "some text",
"icon": "some text",
"caption": "some text",
"itemId": "some text",
"order": 30,
"enhancedText": "some text"
}
],
"categoryGroup": "some text"
},
{
"meta": {
"total_records": 84,
"total_pages": 91,
"page_size": 29
},
"code": "some text",
"name": "some text",
"caption": "some text",
"icon": "some text",
"order": 95,
"link": "some text",
"supportingData": {
"keyName": "some text",
"keyValue": "some text"
},
"searchItemResults": [
{
"link": "some text",
"category": "some text",
"icon": "some text",
"caption": "some text",
"itemId": "some text",
"order": 31,
"enhancedText": "some text"
},
{
"link": "some text",
"category": "some text",
"icon": "some text",
"caption": "some text",
"itemId": "some text",
"order": 22,
"enhancedText": "some text"
}
],
"categoryGroup": "some text"
}
]
}
}
}
}
},
"description": "List of indexed data links"
},
"204": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/searchresult-list"
}
}
},
"description": "No matching content found"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "The request had errors. This could be because:\n1. Badly formatted request or;\n2. Invalid combination of parameters\n3. Invalid data values / not recognised"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Not authorised to the service operation"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Forbidden request\n\nMore details needed."
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "No matching records found or you are not authorised to\naccess the data."
},
"408": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Request timed out with backend.\n\nThe query may be to complex to complete in a timely fashion\nor the search engine is running slowly."
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Internal search engine failure"
}
},
"summary": "Search service on indexed data",
"description": "A list of matching records is returned.\n\nThe list contains minimal information about the record\nand if more information is required then the details\ncan be fetched by following the link for the item."
},
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/searchquery-model"
},
"examples": {
"Example01": {
"value": {
"query": "some text",
"maxResults": 5,
"category": [
{
"code": "some text",
"maxResults": 96,
"pageNo": 13,
"page_size": 97
},
{
"code": "some text",
"maxResults": 50,
"pageNo": 91,
"page_size": 26
}
],
"locale": "some text",
"agreements": [
{
"id": "some text",
"product_id": "some text"
},
{
"id": "some text",
"product_id": "some text"
}
],
"partyId": "some text",
"partyRole": "some text",
"app_name": "some text",
"app_version": "some text",
"app_place": "some text",
"location": {
"longitude": "some text",
"latitude": "some text"
},
"officeUse": {
"employeeId": "some text",
"department": "some text"
},
"sessionContext": [
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"deviceType": "OTHERBROWSER"
}
}
}
}
},
"required": true
},
"tags": [
"Proposed"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/searchresult-list"
},
"examples": {
"Example01-Response": {
"value": {
"query": "some text",
"maxResults": 24,
"category": [
{
"code": "some text",
"maxResults": 98,
"pageNo": 98,
"page_size": 95
},
{
"code": "some text",
"maxResults": 15,
"pageNo": 36,
"page_size": 73
}
],
"locale": "some text",
"agreements": [
{
"id": "some text",
"product_id": "some text"
},
{
"id": "some text",
"product_id": "some text"
}
],
"partyId": "some text",
"partyRole": "some text",
"app_name": "some text",
"app_version": "some text",
"app_place": "some text",
"location": {
"longitude": "some text",
"latitude": "some text"
},
"officeUse": {
"employeeId": "some text",
"department": "some text"
},
"sessionContext": [
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"deviceType": "FIREFOX"
}
}
}
}
},
"description": "Results of complex search for product data"
},
"204": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/searchresult-list"
}
}
},
"description": "No matching content found"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "The request had errors. This could be because:\n1. Badly formatted request or;\n2. Invalid combination of parameters\n3. Invalid data values / not recognised"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Not authorised to the service operation"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Forbidden request\n\nMore details needed."
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "No matching records found or you are not authorised to\naccess the data."
},
"408": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Request timed out with backend.\n\nThe query may be to complex to complete in a timely fashion\nor the search engine is running slowly."
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "Internal search engine failure"
}
},
"summary": "Search service on indexed data using complex criteria",
"description": "Using the POST function a complex search criteria can be\nprovided to the server."
},
"parameters": [
{
"name": "x-v",
"description": "Version of the API end point being requested.",
"schema": {
"type": "integer"
},
"in": "header"
},
{
"name": "x-min-v",
"description": "Minimum version of the API end point requested.",
"schema": {
"type": "integer"
},
"in": "header"
},
{
"name": "x-fapi-interaction-id",
"description": "Value of the Interaction ID of the request.",
"schema": {
"type": "string"
},
"in": "header"
}
]
},
"/investments/{investment_account_id}/authorisation": {
"get": {
"tags": [
"Draft"
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/account-authorisation-model"
}
}
},
"description": "Allowed activities for the investment account\n\nA consumer can call the service and flags will be returned.\n\nWhen the consumer does an action on the account the authorisation is also\nchecked. For example, when placing a sell order for the account\nthe authorisation is checked."
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "No authorised to the service"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/error-model"
}
}
},
"description": "The resource was not found or you do not have \naccess rights to the resource"
}
}
},
"parameters": [
{
"name": "investment_account_id",
"description": "Unique identifier for the investment account",
"schema": {
"type": "string"
},
"in": "path",
"required": true
},
{
"name": "X-CustomerID",
"description": "",
"schema": {
"type": "string"
},
"in": "header"
}
]
}
},
"components": {
"schemas": {
"links-model": {
"title": "Root Type for links-model",
"description": "Hypermedia links see https://restfulapi.net/hateoas/ \n",
"required": [
"rel",
"href"
],
"type": "object",
"properties": {
"href": {
"description": "The hypermedia link for the information request",
"type": "string"
},
"rel": {
"description": "The relationships for the hypermedia link to the current resource.\n\nThe common values are:\n\n* self : this resource. Normally used in lists,\n* first : the first resource in a list, \n* last : the last resource in a list, \n* next : the next resource or page in a list, \n* prev : the previous resource or page in a list\n* create : create a resource\n* update : update a resource\n* delete : delete a resource\n* parent : link to parent resource\n \nAn example use case for \"parent\" is when the resource is a \"holding\" then the parent\nresource is the investment account. For investment accounts the parent resource is\nthe investor.\n\nSee individual components for specific values supported.\n",
"type": "string"
},
"operation": {
"description": "When referring to a HTTP request, the method used for the\nhypermedia link",
"enum": [
"GET",
"POST",
"DELETE",
"PUT",
"PATCH",
"HEAD"
],
"type": "string"
},
"media_type": {
"description": "This is the media type for the request and / or repsonse.\n\nFor GET methods the media type is for the response",
"type": "string"
},
"caption": {
"description": "",
"type": "string"
}
},
"example": {
"href": "https://server/xxx/56b3a016-213e-11ed-90db-0f0cefaf6cc5",
"rel": "self",
"operation": "GET",
"media_type": "application/json"
}
},
"monetary-model": {
"title": "Root Type for monetary-model",
"description": "The monetary element is used wherever monetary value is \nused in a definition.\n\nIt allows for the currency and value pair",
"required": [
"amount",
"currency"
],
"type": "object",
"properties": {
"currency": {
"description": "The 3 character currency code as defined by ISO\n\nThe default is \"AUD\"",
"type": "string"
},
"amount": {
"format": "double",
"description": "The monetary value",
"type": "number"
}
},
"example": {
"currency": "AUD",
"amount": 12.45
}
},
"register-model": {
"title": "Root Type for register-model",
"description": "",
"required": [
"channel_id",
"customer_id"
],
"type": "object",
"properties": {
"customer_id": {
"description": "Unique customer identifier\n\nA legal enity has only on unique customer identifier. If two exists\nthey are merged and there is a surviving customer identifier.",
"type": "string"
},
"channel_id": {
"description": "This is the investors (CRN) channel identifier\n\nAn investor can have multiple investment accounts but these are linked by \ncustomer identifier and/or the channel identifier.\n\nIf a channel identifier is not supplied and none exist for\nthe investor a value will be created. If there is no channel \nidentifier for the customer then a new set of\ncredentials are required.\n\nExisting investors do not need to create a new credential.",
"type": "string"
},
"offer_id": {
"description": "The offer code for a product and account",
"type": "string"
},
"settlement_account": {
"$ref": "#/components/schemas/bankaccount-model",
"description": "Banking account used to pay for purchased assets or\nthe account into which proceeds of a sale are deposited."
},
"credential": {
"description": "If the investor does not currently have an existing\nactive investment account ( you can have multiple) then a \nnew set of credentials are required.\n\nExisting investors do not need to create a new credential.",
"type": "string"
}
},
"example": {
"customer_id": "some text",
"channel_id": "some text",
"offer_id": "some text",
"settlement_account": {
"account_id": "some text",
"bsb": "some text",
"account_number": "some text",
"moo": 41,
"name": "some text"
},
"credential": "some text"
}
},
"holdinglist-model": {
"description": "",
"required": [
"holdings",
"as_at",
"links",
"meta"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "Date and time when the information was last updated\nfrom the source of record. The information could\nbe cached and therefore the \"as_at\" might not be as\nrecent as anticipated.\n\nThe date and time is in ISO8061 format.",
"type": "string"
},
"holdings": {
"description": "List of holdigngs for the investent account.\n\nDepeding on the type of account this could be items\nlike:\n* SHARE\n* ETF\n* CRYPTO\n\nInvestment accounts can have rules about the kind of financial assets\nthey can hold. For example a CRYPTO account is unlikley to allow\nSHARE holdings.\n",
"type": "array",
"items": {
"$ref": "#/components/schemas/holding-model-brief"
}
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"meta": {
"$ref": "#/components/schemas/meta-list",
"description": "Meta data on the list operation"
}
},
"example": {
"as_at": "2018-02-10T09:30Z",
"holdings": [
{
"as_at": "2018-02-10T09:30Z",
"symbol": "some text",
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"media_type": "some text",
"caption": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"media_type": "some text",
"caption": "some text"
}
],
"holding_id": "some text",
"investment_account_id": "some text",
"investment_type": "some text",
"market_place": "some text",
"quantity": 91.64
},
{
"as_at": "2018-02-10T09:30Z",
"symbol": "some text",
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"media_type": "some text",
"caption": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "HEAD",
"media_type": "some text",
"caption": "some text"
}
],
"holding_id": "some text",
"investment_account_id": "some text",
"investment_type": "some text",
"market_place": "some text",
"quantity": 72.69
}
],
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"media_type": "some text",
"caption": "some text"
}
],
"meta": {
"total_records": 66,
"total_pages": 90,
"page_size": 81,
"incomplete_total": true
}
}
},
"value-model": {
"description": "",
"type": "object",
"properties": {
"units": {
"description": "Number of whole or fractal units.\n\nSome instrument types can be fractal, others must be integer. ",
"type": "number"
},
"value": {
"$ref": "#/components/schemas/monetary-model",
"description": "The monetary value of the asset at the point of time.\n\nThe parent must have a \"As At\" or a date value present"
}
},
"example": {
"units": 72,
"value": {
"currency": "AUD",
"amount": 54.63
}
}
},
"investmentaccountlist-model": {
"title": "Root Type for investmentaccountlist-model",
"description": "",
"required": [
"accounts",
"links",
"as_at",
"meta"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "Date and time when the information was last updated\nfrom the source of record. The information could\nbe cached and therefore the \"as_at\" might not be as\nrecent as anticipated.\n\nThe date and time is in ISO8061 format.",
"type": "string"
},
"accounts": {
"description": "List of investment accounts\n\nOnly accounts authorised to be accessed are listed.",
"type": "array",
"items": {
"$ref": "#/components/schemas/investmentaccount-model"
}
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"meta": {
"$ref": "#/components/schemas/meta-list",
"description": "Meta data on the list operation"
}
},
"example": {
"as_at": "2018-02-10T09:30Z",
"accounts": [
{
"customer_id": "some text",
"investment_account_id": "some text",
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "HEAD",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"media_type": "some text"
}
],
"settlement_account": {
"accountid": "some text",
"name": "some text",
"bsb": "some text",
"account": "some text",
"moo": 4
},
"hasReoccurring": true
},
{
"customer_id": "some text",
"investment_account_id": "some text",
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "HEAD",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "POST",
"media_type": "some text"
}
],
"settlement_account": {
"accountid": "some text",
"name": "some text",
"bsb": "some text",
"account": "some text",
"moo": 5
},
"hasReoccurring": true
}
],
"_list": [
{
"href": "/register",
"rel": "create",
"operation": "POST",
"media_type": "application/json"
},
{
"href": "/investor",
"rel": "self",
"operation": "GET",
"media_type": "application/json"
}
]
}
},
"holding-model-brief": {
"description": "Provides the identifiers for the asset and its\nvalue as reported from the source of record.\n\nThe source of record for assets includes the \nregistry holding the number of units and the\nmarket exchange as to the price of the asset\nas at date and time.\n",
"required": [
"as_at",
"investment_type",
"market_place",
"symbol",
"links",
"holding_id",
"investment_account_id",
"quantity"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "Date and time when the information was last updated\nfrom the source of record. The information could\nbe cached and therefore the \"as_at\" might not be as\nrecent as anticipated.\n\nThe date and time is in ISO8061 format.",
"type": "string"
},
"symbol": {
"description": "",
"type": "string"
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"holding_id": {
"description": "Unique holding identifier\n\nPer investmenttype, exchange and symbol combination there can only be\none holding identifier.",
"type": "string"
},
"investment_account_id": {
"description": "The investment account associated with the \ninvestor entity. This is unique to the investment account\nregistry.\n\nAn investor can have multiple investment accounts",
"type": "string"
},
"investment_type": {
"description": "",
"type": "string"
},
"market_place": {
"description": "",
"type": "string"
},
"quantity": {
"description": "Number of assets held.\n\nThis can be fractal if allowed for the asset.",
"type": "number"
}
},
"example": {
"as_at": "2018-02-10T09:30Z",
"investment_type": "SHARE",
"market_place": "ASX",
"symbol": "TLS",
"quantity": 10,
"links": [
{
"href": "/orders?investmentaccountid={investmentaccountid}&assetclass={assetclass}&exchange={exchange}&symbol={symbol}",
"rel": "orders",
"operation": "GET",
"media_type": "application/json"
},
{
"href": "/products/{assetclass}/{exchange}/{symbol}",
"rel": "product",
"operation": "GET",
"media_type": "application/json"
}
]
}
},
"holding-model": {
"description": "Provides the identifiers for the investment asset and its\nvalue as reported from the source of record.\n\nThe source of record for invetsment assets includes the \nregistry holding the number of units and the\nmarket exchange value price of the investment asset\nas at date and time.\n",
"required": [
"as_at",
"investment_type",
"market_place",
"symbol",
"links",
"holding_id",
"pending_buy",
"pending_sell",
"investment_account_id",
"quantity"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "Date and time when the information was last updated\nfrom the source of record. The information could\nbe cached and therefore the \"as_at\" might not be as\nrecent as anticipated.\n\nThe date and time is in ISO8061 format.",
"type": "string"
},
"symbol": {
"description": "Symbol code for the asset\n\nThe code is ALL UPPERCASE",
"type": "string",
"example": "TLS"
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"holding_id": {
"description": "Unique holding identifier\n\nPer investmenttype, exchange and symbol combination there can only be\none holding identifier.",
"type": "string"
},
"investment_account_id": {
"description": "The investment account under which this holding is registered.\n\nThe owner(s) of the investment acocunt are the owners of the \ninvestment asset.",
"type": "string"
},
"investment_type": {
"description": "The code for investment type for the asset.\n\nThe code is ALL UPPERCASE",
"type": "string"
},
"market_place": {
"description": "The code for investment asset's exchange\n\nThe code is ALL UPERCASE",
"type": "string"
},
"quantity": {
"description": "Number of asset symbols held currently\n\nThis can be fractal if allowed for the symbol",
"type": "number"
},
"pending_buy": {
"description": "The holding has pending BUY changes.\n\nAn order has been placed but has not been settled as yet whch will\nimpact the value of the holding.\n\nThe current values do not include pending orders.",
"type": "number"
},
"pending_sell": {
"description": "The holding has pending SELL changes.\n\nAn order has been placed but has not been settled as yet whch will\nimpact the value of the holding.\n\nThe current values do not include pending orders.",
"type": "number"
}
},
"example": {
"as_at": "2018-02-10T09:30Z",
"investment_type": "SHARE",
"market_place": "ASX",
"symbol": "TLS",
"quantity": 15,
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "DELETE",
"media_type": "some text",
"caption": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PUT",
"media_type": "some text",
"caption": "some text"
}
],
"holding_id": "5bb9ebb4-040f-4475-a1eb-b2ded9429cbd",
"pending_buy": 0,
"pending_sell": 0
}
},
"investmentaccount-model": {
"title": "Root Type for investor-model",
"description": "",
"required": [
"investmentaccountid",
"investors",
"name",
"links",
"investment_account_id",
"holding_rules",
"product_id"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "Date and time when the information was last updated\nfrom the source of record. The information could\nbe cached and therefore the \"as_at\" might not be as\nrecent as anticipated.\n\nThe date and time is in ISO8061 format.",
"type": "string"
},
"investment_account_id": {
"description": "The investment account associated with the \ninvestor entity. This is unique to the investment account\nregistry.\n\nAn investor can have multiple investment accounts.",
"type": "string"
},
"investment_account_number": {
"description": "The investment account number displayed to the investor.\nThis is unique to the investment account registry.",
"type": "string"
},
"name": {
"description": "Name allocated to the investment account",
"type": "string"
},
"settlement_account": {
"$ref": "#/components/schemas/bankaccount-model",
"description": "The banking account used for debits when buying assets or credits\nwhen assets are sold.\n\nThe settlement account details are copied to the trade order."
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"holding_rules": {
"description": "Describes the types of holdigs the investment account \ncan manage.",
"type": "array",
"items": {
"$ref": "#/components/schemas/ruleholding-model"
}
},
"investors": {
"description": "Investors and other enities with an associated role to the investment account entity",
"type": "array",
"items": {
"$ref": "#/components/schemas/investorrole-model"
}
},
"product_id": {
"description": "Product identifier",
"type": "string"
}
},
"example": {
"customer_id": "0804bcff-f2e6-41a3-b155-2d2c632436e2",
"investmentaccountid": "530cadcc-fe6f-467a-a9df-c63a79e1c7c4",
"name": "Trust Investment Accouunt",
"links": [
{
"href": "/530cadcc-fe6f-467a-a9df-c63a79e1c7c4/details",
"rel": "self",
"operation": "GET",
"media_type": "application/json"
},
{
"href": "/530cadcc-fe6f-467a-a9df-c63a79e1c7c4/portfolio",
"rel": "selfx",
"operation": "GET",
"media_type": "application/json"
},
{
"href": "/530cadcc-fe6f-467a-a9df-c63a79e1c7c4/holdings",
"rel": "resources",
"operation": "GET",
"media_type": "application/json"
}
]
}
},
"investment-model": {
"description": "Investment information",
"required": [
"as_at",
"caption",
"links"
],
"type": "object",
"properties": {
"as_at": {
"format": "date-time",
"description": "",
"type": "string"
},
"caption": {
"description": "",
"type": "string"
},
"description": {
"description": "",
"type": "string"
},
"links": {
"description": "",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
}
},
"example": {
"as_at": "2018-02-10T09:30Z",
"caption": "some text",
"description": "some text",
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"media_type": "some text",
"caption": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"media_type": "some text",
"caption": "some text"
}
]
}
},
"ruleholding-model": {
"title": "Root Type for ruleholding-model",
"description": "Rule for investment account\non the holdings it allows.\n",
"type": "object",
"properties": {
"investment_type": {
"type": "string"
},
"exchange": {
"type": "string"
}
},
"example": {
"investment_type": "SHARE",
"exchange": "ASX"
}
},
"meta-list": {
"title": "Root Type for meta-list",
"description": "Meta data for lists.\n\nThis is returned for all list services.\n",
"required": [
"page_size",
"total_pages",
"total_records",
"incomplete_total"
],
"type": "object",
"properties": {
"total_records": {
"format": "int32",
"description": "The total number of records in the list\nacross all pages.\n\nThe valuue must be 0 (zero) or a positive integer",
"minimum": 0,
"type": "integer"
},
"total_pages": {
"format": "int32",
"description": "The total number of pages in the list.\n\nThe value will be 0 if there are no records, otherwise\nif there are records in the list the value \nwill be an integer valuue of 1 or greater.\n\nThis value can be used in pagination",
"type": "integer"
},
"page_size": {
"description": "The page size for pagination",
"type": "integer"
},
"incomplete_total": {
"description": "A flag to indicate the total number of records\nis incomplete and there are more records.\n\nThe service has stopped further processing\nand so has not arrived at a total number for the\nreason that the number is large and to determine\na true number would require extra processing and \ndelay the results being returned.\n\nIf displaying the total records or pages, you may consider \nadding a \"+\" symbol to denote more.",
"type": "boolean"
}
},
"example": {
"total_records": 28,
"total_pages": 14,
"incomplete_total": false
}
},
"investorrole-model": {
"title": "Root Type for investorrole-model",
"description": "The investor and role for the investment account.",
"required": [
"party_id",
"role"
],
"type": "object",
"properties": {
"role": {
"description": "Role that the party has.\n\nThere is only one role per record.\n\nThe standard roles are:\n\n1. OWNER\n2. OPERATE\n3. POA (power of attorney)\n4. VIEW",
"type": "string"
},
"party_id": {
"description": "The party identifier. An investment account can have\nmany parties authorised to access and/or operate the account.\n\nThr roles can include viewing, owneing, trasnact, power of attorney.\n\nA party can have more than one role and in which case there are multiple records. ",
"type": "string"
}
},
"example": {
"partyID": "uuid",
"role": "owner"
}
},
"error-model": {
"description": "A common error payload returned \nwhen the response code is not 2xx",
"type": "object",
"properties": {
"status": {
"description": "Status identifier that can be used to identify the\ncause of the error.\n\nIt s not the HTTP status code (eg 4xx ot 5xx)",
"type": "string"
},
"message": {
"description": "Error description, that shuld be less technical \nand more user orientated where possible",
"type": "string"
},
"resolution": {
"description": "Information on how the error or issue may\nbe resolved.",
"type": "string"
},
"technical": {
"description": "Technical information for the error.\n\nThis must not contain sensitive information",
"type": "string"
}
}
},
"searchagreement-model": {
"title": "Root Type for searchagreements-model",
"description": "The agreement segment is to identify the\nunique agreement identifier for the product.\n\nAs products can have different registries there\ncan be collisions between identifiers\n\nIf all the products use a unique identifier such \nas UUID within an organisation then the cheance of \ncollision is highly unlikely.\n\nThe identifier in this segment does not need\nto be the agreement (accout) identifier that \nis communicated with the customer.\n\nTo locate the customer known and communicated identifier\nyou need to use the id with the product registry\nto get the appropriate value(s)",
"type": "object",
"properties": {
"id": {
"description": "Agreement identifier.\n\nThe agreement could be a banking account (includding any routing)\ninsurance contract, investment account, etc",
"type": "string"
},
"product_id": {
"description": "Product identifier.\n\nThe product identifier along with agreement identifer will give \na unique identifier as different product systems may\nhave the same agreement id by chance.",
"type": "string"
}
},
"example": {
"id": "some text",
"product_id": "some text"
}
},
"searchcategory-model": {
"title": "Root Type for searchcategory-model",
"description": "Search request that can further refine the results\nrequired per category.\n\nIf the category is supplied then the search implies\nincluding only the categories mentioned and \nexclude other catagories.",
"required": [
"category_id"
],
"type": "object",
"properties": {
"max_results": {
"format": "int32",
"description": "Maximum number of results returned for the category",
"type": "integer"
},
"page_no": {
"description": "The page number of the results to return if there is\nmore than one page.\n\nAn invalid page nuber will return an error and no\nresults.",
"type": "integer"
},
"page_size": {
"description": "The size of each results page. The default size is dynamic but constant for\nthe same search session.\n\nAn invalid page size will return an error and no\nresults.",
"type": "integer"
},
"category_id": {
"description": "Code for the category.\n\nIf the code is not recognised then the\nservice will return an error and no\nresults.",
"maxLength": 20,
"type": "string"
}
},
"example": {
"code": "some text",
"maxResults": 19,
"pageNo": 48,
"pageSize": 58
}
},
"searchcontext-model": {
"title": "Root Type for searchcontext-model",
"description": "",
"required": [
"key"
],
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
},
"supporting_data": {
"description": "",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchsupportingdata-model"
}
}
},
"example": {
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
},
"searchlocation-model": {
"title": "Root Type for searchlocation-model",
"description": "",
"type": "object",
"properties": {
"longitude": {
"type": "string"
},
"latitude": {
"type": "string"
}
},
"example": {
"longitude": "33.0",
"latitude": "150.3"
}
},
"searchofficeuse-model": {
"title": "Root Type for searchofficeuse-model",
"description": "",
"type": "object",
"properties": {
"department_id": {
"type": "string"
},
"employee_id": {
"type": "string"
}
},
"example": {
"employeeId": "35667",
"department": "support"
}
},
"searchquery-model": {
"title": "Root Type for searchquery-model",
"description": "# Search Query Model\n\nRequest information for search.\n\nBy using a more complex structure for search\nit is possible to fine tune the results.\n\n\n## Global Search Query\n\nThe definition here is a global definition that is being \napplied to the category of Investment Products.\n\nThe results are only for this service domain.",
"required": [
"query"
],
"type": "object",
"properties": {
"query": {
"description": "The search string or input\n\nIf multiple words are used then the results where the multiple occur are\ngiven a higher priority over those with only a single word match\n\nIf an exact match is required then _use single quotes_ around the search string.\n\n**Note**: The search string is not case sensitive ",
"maxLength": 200,
"minLength": 0,
"type": "string"
},
"category": {
"description": "# Category searching\n\nThe category is optional.\n\nThe category is used to signal to the search engine\nthe area of interest for the search.\n\nOnly matching items from the category wil be included in the results\n\n## Example 1\n\nIf the category \"investing\" then investing results will be returned.",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchcategory-model"
}
},
"locale": {
"description": "The locale of the search.\n\nThis is of the standard form.\n\nExamples are:\n\n* en\n* en-us\n* en-au\n* fr\n* fr-ch",
"type": "string"
},
"party_id": {
"description": "This is the party in whose context the search is being made.\n\nFor example the party identifier coudl be that for a customer\nand their role being an agreement owner. Therefore the search results\nwill favour items that are related to their accounts especially the\nones listed in their agreement list.",
"type": "string"
},
"party_type": {
"description": "The role of the party that has been supplied.\n\nThe role is not a must if a party id has been supplied.",
"type": "string"
},
"app_version": {
"description": "Version of the application\n\nThis is in recognition of the fact that if the search\nresults link to an item in the application, then \na link understood by that application **and** version\nneeds to be returned.",
"type": "string"
},
"location": {
"$ref": "#/components/schemas/searchlocation-model",
"description": "The geographical location from which the query is being made.\n\nThis can be useful if searching for nearby services, \nsuch as an ATM.",
"properties": {
"ipAddress": {
"type": "string"
},
"longitude": {
"type": "string"
},
"latitude": {
"type": "string"
}
}
},
"office_use": {
"$ref": "#/components/schemas/searchofficeuse-model",
"description": "For internal as opposed to external users this provides\ncontext of the internal query.",
"properties": {
"employeeId": {
"type": "string"
},
"department": {
"type": "string"
}
}
},
"session_context": {
"description": "# Context searching\n\nThe context is used to signal to the search engine\nthe area of interest for the search.\n\nMatching items to the search string will be given a \nhigher priority in the results if they are from the \ncontext.\n\n## Example 1\n\nIf the context includes \"fromDate\" and \"todDate\", then the results will \nfavour transactions between the two dates.\n\n",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchcontext-model"
}
},
"device_type": {
"description": "The type of device the search query is made from.",
"enum": [
"ANDROID",
"IOS",
"EDGE",
"CHROME",
"FIREFOX",
"OTHERBROWSER",
"API",
"OTHER"
],
"type": "string"
},
"arrangements": {
"description": "List of arrangements that are used to match the results.\n\nArrangements includes bank accounts, investment accounts,\ninsurance policies, safe custody product, etc",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchagreement-model"
}
},
"app_name": {
"description": "The application name making the search request.\n\nThis is the consumer application name in most cases but could\nbe an automated system that needs to identify the location of\nan item. System queries should be rare and require discussion\nbefore implementation as there are impacts that need approval.\n",
"type": "string"
},
"app_place": {
"description": "The screen or place in the application making the \nsearch request. This information is useful\nas a context in which to rank the results.",
"type": "string"
},
"max_results": {
"format": "int32",
"description": "The maximum number of query results returned.\n\nIf not specified, the default value of 80 is used\n\nThis is the maximum number across each category and \nnot per category.",
"type": "integer"
}
},
"example": {
"query": "some text",
"maxResults": 11,
"category": [
{
"code": "some text",
"maxResults": 42,
"pageNo": 63,
"pageSize": 29
},
{
"code": "some text",
"maxResults": 75,
"pageNo": 99,
"pageSize": 65
}
],
"locale": "some text",
"partyId": "some text",
"partyRole": "some text",
"appName": "some text",
"appVersion": "some text",
"appPlace": "some text",
"location": {
"longitude": "some text",
"latitude": "some text"
},
"officeUse": {
"employeeId": "some text",
"department": "some text"
},
"sessionContext": [
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"key": "some text",
"value": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"deviceType": "ANDROID",
"arrangements": [
{
"id": "some text",
"productCode": "some text"
},
{
"id": "some text",
"productCode": "some text"
}
]
}
},
"searchresult-list": {
"description": "",
"required": [
"meta",
"search_identifier",
"search_category_results",
"links"
],
"type": "object",
"properties": {
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"meta": {
"$ref": "#/components/schemas/meta-list",
"description": "Meta data on the list service.\n\nA search will return a maximum of 500 items"
},
"experimental_group": {
"description": "Internal identifier for result group.",
"type": "string"
},
"search_category_results": {
"description": "A list of found matches to the category\nfor the the search criteria",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchresultcategory-model"
}
},
"search_identifier": {
"description": "Unique identifier for the search request",
"type": "string"
}
},
"example": {
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"caption": "some text",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "POST",
"caption": "some text",
"media_type": "some text"
}
],
"meta": {
"incomplete_total": true,
"page_size": 90,
"total_pages": 36,
"total_records": 15
},
"experimental_group": "some text",
"search_category_results": [
{
"meta": {
"incomplete_total": true,
"page_size": 83,
"total_pages": 63,
"total_records": 77
},
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "DELETE",
"caption": "some text",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PUT",
"caption": "some text",
"media_type": "some text"
}
],
"code": "some text",
"name": "some text",
"caption": "some text",
"icon": "some text",
"order": 32,
"link": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
],
"searchItemResults": [
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 22,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 79,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"experimentalGroup": "some text",
"isPartialResult": true
},
{
"meta": {
"incomplete_total": true,
"page_size": 39,
"total_pages": 35,
"total_records": 82
},
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"caption": "some text",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "POST",
"caption": "some text",
"media_type": "some text"
}
],
"code": "some text",
"name": "some text",
"caption": "some text",
"icon": "some text",
"order": 59,
"link": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
],
"searchItemResults": [
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 55,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 38,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"experimentalGroup": "some text",
"isPartialResult": true
}
],
"search_identifier": "some text"
}
},
"searchresultcategory-model": {
"title": "Root Type for searchresultcategory-model",
"description": "",
"required": [
"searchItemResults",
"meta",
"code",
"name",
"order",
"supportingData",
"isPartialResult",
"category_id",
"search_item_results",
"supporting_data",
"links",
"meta"
],
"type": "object",
"properties": {
"meta": {
"$ref": "#/components/schemas/meta-list",
"description": "Meta data for the category.\n\nThis includes the pagination information for\nthe category results"
},
"links": {
"description": "Links to additional information or actions for the category",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
},
"category_id": {
"description": "Category code",
"type": "string"
},
"name": {
"description": "Category name that can be used as header / section lead.",
"type": "string"
},
"caption": {
"description": "A summary caption associated with the category.\n\nThis is not the category name.",
"type": "string"
},
"icon": {
"description": "An optional icon for the category",
"type": "string"
},
"order": {
"format": "int32",
"description": "Order for the category within the result list of categories.\n\nIndividual items under this category have their own\nsub order within the category.",
"type": "integer"
},
"link": {
"description": "Link to category search result item",
"type": "string"
},
"supporting_data": {
"description": "Supporting data for the category",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchsupportingdata-model"
}
},
"search_item_results": {
"description": "List of search item results within the category.",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchresultitem-model"
}
},
"experimental_group": {
"description": "Group value for the category",
"maxLength": 1,
"type": "string"
},
"is_partial_result": {
"description": "A flag to indicate if the category results are\na partial result or complete. In some cases the\nsearch engine may not be able to complete the \ncomplete search, such as timeout or other\ntechnical issue, resulting partial result lists.\n\nThis is not the same as pagination returning \na partial result.",
"type": "boolean"
}
},
"example": {
"meta": {
"incomplete_total": true,
"page_size": 92,
"total_pages": 44,
"total_records": 92
},
"links": [
{
"href": "some text",
"rel": "some text",
"operation": "GET",
"caption": "some text",
"media_type": "some text"
},
{
"href": "some text",
"rel": "some text",
"operation": "PATCH",
"caption": "some text",
"media_type": "some text"
}
],
"category_id": "some text",
"name": "some text",
"caption": "some text",
"icon": "some text",
"order": 60,
"link": "some text",
"supporting_data": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
],
"search_item_results": [
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 64,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
},
{
"itemId": "some text",
"link": "some text",
"icon": "some text",
"caption": "some text",
"category": "some text",
"order": 22,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
],
"experimental_group": "some text",
"is_partial_result": true
}
},
"searchresultitem-model": {
"description": "A single item that matches the query or search request",
"required": [
"caption",
"link",
"itemId",
"order",
"supportingData",
"search_id",
"supporting_data"
],
"type": "object",
"properties": {
"search_id": {
"description": "Unique search identifier for the index item\n\nThis value is provided on the feedback to search when the user actions\nthe search link.",
"type": "string"
},
"item_id": {
"description": "Unique identifier for the index item\n\nThis is the identifier within the source system from\nwhich the item was indexed.\n\nMultiple result items can return the same identifier\nif they refer to the same item in the source system",
"type": "string"
},
"link": {
"description": "A link to the item",
"type": "string"
},
"icon": {
"description": "An optional icon or small image that can be displayed along the\nsearch result caption",
"type": "string"
},
"caption": {
"description": "A short summary of the index item.\n\nThis could be a snippet of text based on the search query.",
"type": "string"
},
"order": {
"description": "The order of the item in the search results.\n\nThis is expected to the index (1 based index)\nof the result in the list.",
"type": "integer"
},
"enhanced_text": {
"description": "Extended, longer text for the item.\n\nThe text can be in markdown format.\n",
"type": "string"
},
"experimental_group": {
"description": "Group value for the item",
"maxLength": 1,
"type": "string"
},
"supporting_data": {
"description": "Supporting data for the item",
"type": "array",
"items": {
"$ref": "#/components/schemas/searchsupportingdata-model"
}
}
},
"example": {
"link": "some text",
"icon": "some text",
"caption": "some text",
"itemId": "some text",
"order": 20,
"enhancedText": "some text",
"experimentalGroup": "some text",
"supportingData": [
{
"keyName": "some text",
"keyValue": "some text"
},
{
"keyName": "some text",
"keyValue": "some text"
}
]
}
},
"searchsupportingdata-model": {
"title": "Root Type for searchSupportigData",
"description": "Supporting data for the context.\n\nThis provides an extension to the \nprimary key value pair data for the context\nif required.",
"required": [
"key_name",
"key_value"
],
"type": "object",
"properties": {
"key_name": {
"description": "Key identifying the value.\n\nThe key is unique within the set of supporting data",
"type": "string"
},
"key_value": {
"description": "Data value associated with the key",
"type": "string"
}
},
"example": {
"keyName": "some text",
"keyValue": "some text"
}
},
"health-model": {
"title": "Root Type for health-model",
"description": "The response object from a \"health\" request.\n\nThe response may be full. partial, minimal or missing \nif the statsu is not \"200\"",
"required": [
"status",
"checks",
"links"
],
"type": "object",
"properties": {
"status": {
"description": " Indicates whether the service status is acceptable\r\n or not\r\n \r\n indicates whether the service status is acceptable\r\n or not. API publishers SHOULD use following values for the field:\r\n\r\n* \"pass\": healthy (acceptable aliases: \"ok\" to support Node's\r\n Terminus and \"up\" for Java's SpringBoot),\r\n\r\n* \"fail\": unhealthy (acceptable aliases: \"error\" to support Node's\r\n Terminus and \"down\" for Java's SpringBoot), and\r\n\r\n* \"warn\": healthy, with some concerns.\r\n\r\n The value of the status field is case-insensitive and is tightly\r\n related with the HTTP response code returned by the health endpoint.\r\n For \"pass\" status, HTTP response code in the 2xx-3xx range MUST be\r\n used. For \"fail\" status, HTTP response code in the 4xx-5xx range\r\n MUST be used. In case of the \"warn\" status, endpoints MUST return\r\n HTTP status in the 2xx-3xx range, and additional information SHOULD\r\n be provided, utilizing optional fields of the response.\r\n\r\n A health endpoint is only meaningful in the context of the component\r\n it indicates the health of. It has no other meaning or purpose. As\r\n such, its health is a conduit to the health of the component.\r\n Clients SHOULD assume that the HTTP response code returned by the\r\n health endpoint is applicable to the entire component (e.g. a larger\r\n API or a microservice). This is compatible with the behavior that\r\n current infrastructural tooling expects: load-balancers, service\r\n discoveries and others, utilizing health-checks.",
"enum": [
"PASS",
"WARN",
"FAIL"
],
"type": "string"
},
"version": {
"description": "Public version of the service",
"type": "string"
},
"notes": {
"description": "Array of notes relevant to current state of health",
"type": "array",
"items": {
"type": "string"
}
},
"output": {
"description": "Raw error output, in case of \"fail\" or \"warn\"\r\nstates. This field SHOULD be omitted for \"pass\" state.",
"type": "string"
},
"description": {
"description": "A human-friendly description of the\r\nservice.\r\n",
"type": "string"
},
"checks": {
"description": " The \"checks\" object MAY have a number of unique keys, one for each\r\n logical downstream dependency or sub-component. Since each sub-\r\n component may be backed by several nodes with varying health\r\n statuses, these keys point to arrays of objects. In case of a\r\n single-node sub-component (or if presence of nodes is not relevant),\r\n a single-element array SHOULD be used as the value, for consistency.\r\n\r\n The key identifying an element in the object SHOULD be a unique\r\n string within the details section. It MAY have two parts:\r\n \"{componentName}:{measurementName}\", in which case the meaning of the\r\n parts SHOULD be as follows:\r\n\r\n * componentName: (optional) human-readable name for the component.\r\n MUST not contain a colon, in the name, since colon is used as a\r\n separator.\r\n\r\n * measurementName: (optional) name of the measurement type (a data\r\n point type) that the status is reported for. MUST not contain a\r\n colon, in the name, since colon is used as a separator. The\r\n observation's name can be one of:\r\n\r\n - A pre-defined value from this spec. Pre-defined values\r\n include:\r\n\r\n o utilization\r\n\r\n o responseTime\r\n\r\n o connections\r\n\r\n o uptime\r\n\r\n - A common and standard term from a well-known source such as\r\n schema.org, IANA or microformats.\r\n\r\n - A URI that indicates extra semantics and processing rules that\r\n MAY be provided by a resource at the other end of the URI.\r\n URIs do not have to be dereferenceable, however. They are just\r\n a namespace, and the meaning of a namespace CAN be provided by\r\n any convenient means (e.g. publishing an RFC, Open API Spec\r\n document or a nicely printed book).\r\n\r\n On the value side of the equation, each \"component details\" object in\r\n the array SHOULD have at least one key.",
"additionalProperties": {
"type": "array",
"items": {
"$ref": "#/components/schemas/healthcheck-model"
}
}
},
"release_id": {
"description": "In well-designed APIs, backwards-compatible\r\nchanges in the service should not update a version number. APIs\r\nusually change their version number as infrequently as possible, to\r\npreserve stable interface. However, implementation of an API may\r\nchange much more frequently, which leads to the importance of having\r\nseparate \"release number\" or \"releaseId\" that is different from the\r\npublic version of the API.",
"type": "string"
},
"service_id": {
"description": "A unique identofoer (UUID) for the service",
"type": "string"
},
"links": {
"description": "Links to additional information or actions for the resource",
"type": "array",
"items": {
"$ref": "#/components/schemas/links-model"
}
}
},
"example": {
"status": "pass",
"version": "1",
"releaseId": "1.2.2",
"notes": [
""
],
"output": "",
"serviceId": "f03e522f-1f44-4062-9b55-9587f91c9c41",
"description": "health of authz service",
"checks": {
"cassandra:responseTime": [
{
"componentId": "dfd6cf2b-1b6e-4412-a0b8-f6f7797a60d2",
"componentType": "datastore",
"observedValue": 250,
"observedUnit": "ms",
"status": "pass",
"affectedEndpoints": [
"/users/{userId}",
"/customers/{customerId}/status",
"/shopping/{anything}"
],
"time": "2018-01-17T03:36:48Z",
"output": ""
}
],
"cassandra:connections": [
{
"componentId": "dfd6cf2b-1b6e-4412-a0b8-f6f7797a60d2",
"componentType": "datastore",
"observedValue": 75,
"status": "warn",
"time": "2018-01-17T03:36:48Z",
"output": "",
"links": {
"self": "http://api.example.com/dbnode/dfd6cf2b/health"
}
}
],
"uptime": [
{
"componentType": "system",
"observedValue": 1209600.245,
"observedUnit": "s",
"status": "pass",
"time": "2018-01-17T03:36:48Z"
}
],
"cpu:utilization": [
{
"componentId": "6fd416e0-8920-410f-9c7b-c479000f7227",
"node": 1,
"componentType": "system",
"observedValue": 85,
"observedUnit": "percent",
"status": "warn",
"time": "2018-01-17T03:36:48Z",
"output": ""
},
{
"componentId": "6fd416e0-8920-410f-9c7b-c479000f7227",
"node": 2,
"componentType": "system",
"observedValue": 85,
"observedUnit": "percent",
"status": "warn",
"time": "2018-01-17T03:36:48Z",
"output": ""
}
],
"memory:utilization": [
{
"componentId": "6fd416e0-8920-410f-9c7b-c479000f7227",
"node": 1,
"componentType": "system",
"observedValue": 8.5,
"observedUnit": "GiB",
"status": "warn",
"time": "2018-01-17T03:36:48Z",
"output": ""
},
{
"componentId": "6fd416e0-8920-410f-9c7b-c479000f7227",
"node": 2,
"componentType": "system",
"observedValue": 5500,
"observedUnit": "MiB",
"status": "pass",
"time": "2018-01-17T03:36:48Z",
"output": ""
}
]
},
"links": {
"about": "http://api.example.com/about/authz",
"http://api.x.io/rel/thresholds": "http://api.x.io/about/authz/thresholds"
}
}
},
"healthcheck-model": {
"title": "Root Type for healthcheck-model",
"description": "",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"output": {
"type": "string"
},
"affected_end_points": {
"type": "array",
"items": {
"type": "string"
}
},
"component_id": {
"type": "string"
},
"component_type": {
"type": "string"
},
"observed_unit": {
"type": "string"
},
"observed_value": {
"format": "float",
"type": "number"
},
"as_at": {
"format": "date-time",
"type": "string"
}
},
"example": {
"componentId": "dfd6cf2b-1b6e-4412-a0b8-f6f7797a60d2",
"componentType": "datastore",
"observedValue": 250,
"observedUnit": "ms",
"status": "pass",
"affectedEndpoints": [
"/users/{userId}",
"/customers/{customerId}/status",
"/shopping/{anything}"
],
"asAt": "2018-01-17T03:36:48Z",
"output": ""
}
},
"account-authorisation-model": {
"description": "The entitlements associated with this investment account",
"required": [
"can_buy",
"can_sell",
"allow_reocurring",
"max_impulse_investment_value",
"min_investment_value"
],
"type": "object",
"properties": {
"allow_reocurring": {
"description": "",
"type": "boolean"
},
"min_investment_value": {
"description": "The minimum investment value in a single trade.\n\nThe defaults are:\n* $0 for Pocket\n* $500 for domestic\n* $?? for crypto\n* AUD$ ??? for international\n\nThe above values are subject to change and are indicative. You must\ncheck against the vaue supplied.\n",
"type": "number"
},
"max_impulse_investment_value": {
"description": "",
"type": "integer"
},
"can_buy": {
"description": "",
"type": "boolean"
},
"can_sell": {
"description": "",
"type": "boolean"
}
}
},
"bankaccount-model": {
"title": "Root Type for bankaccount-model",
"description": "",
"required": [
"account_id",
"account_number",
"name"
],
"type": "object",
"properties": {
"account_id": {
"description": "Internal UUID representation of the account number\n\nFor privacy and security reasons the account number may not be\navailable in all services and the account_id can be used internally\nto associate with th right resource.\n\nThe account_id cannot be used externally for monetary transfers and\nneither is it displayed to customers.",
"type": "string"
},
"bsb": {
"description": "Bank sub-branch\n\nA 6 digit number, sometimes represented as 123-456",
"type": "string"
},
"account_number": {
"description": "The banking account number\n\nThe BSB is excluded from this value\n\n**Question** Can we mask the value with ### except the \nlast four digits, or should we have another attribute",
"type": "string"
},
"moo": {
"format": "int32",
"description": "Method of operation",
"type": "integer"
},
"name": {
"description": "Account name or title\n\nCommonly the default value is the name of the customer owning\nthe account",
"type": "string"
}
},
"example": {
"account_id": "some text",
"bsb": "some text",
"account_number": "some text",
"moo": 50,
"name": "some text"
}
}
},
"securitySchemes": {
"BasicAuth": {
"scheme": "basic",
"type": "http"
},
"ApiKey": {
"type": "apiKey",
"name": "X-ApiKey",
"in": "header"
},
"BearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
},
"security": [
{
"BasicAuth": [
]
},
{
"ApiKey": [
]
},
{
"BearerAuth": [
]
}
],
"tags": [
{
"name": "Proposed",
"description": "API has been proposed but no specification has been drafted"
},
{
"name": "Draft",
"description": ""
}
]
}