Introduction
These standards have been developed as part of the introduction in Australia of the Consumer Data Right legislation to give Australians greater control over their data.
The Consumer Data Right is intended to apply sector by sector across the whole economy, beginning in the banking, energy and telecommunications sectors. These standards have been developed to facilitate the Consumer Data Right by acting as a specific baseline for implementation.
These standards are governed by the Consumer Data Standards team inside Data61. Data61 has been appointed as the interim standards body. The work of the team is overseen by Mr. Andrew Stevens as interim Chair, with industry and consumer advice provided by an Advisory Committee. Data61 works closely with the Australian Competition and Consumer Commission (ACCC) as lead regulator of the Consumer Data Right, supported by the Office of the Australian Information Commissioner (OAIC).
Note that security standards are only partially represented in these standards as they are under development by the Information Security Working Group. More detail can found at the Information Security Profile working draft.
Standards
These standards represent version 0.2.0 of the high level standards which will support the creation of version 1. See the versioning section for more information on how versions are managed in the standard.
Note that, in this proposal, the key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL are to be interpreted as described in RFC2119.
Principles
The following principles, classified as Outcome Principles and Technical Principles, are the basis for the development of the standards for the Consumer Data Right.
Outcome Principles
These principles articulate qualitative outcomes that the API definitions should seek to deliver.
Principle 1: APIs are secure
The API definitions will consider and incorporate the need for a high degree of security to protect customer data. This includes the risk of technical breach but also additional concerns of inadvertent data leakage through overly broad data payloads and scopes. The security of customer data is a first order outcome that the API standards must seek to deliver.
Principle 2: APIs use open standards
In order to promote widespread adoption, open standards that are robust and widely used in the industry will be used wherever possible.
Principle 3: APIs provide a good customer experience
The API definitions will consider and incorporate the customer experience implications. The APIs should support the creation of customer experiences that are simple and enticing to use.
Principle 4: APIs provide a good developer experience
To ensure that the entry hurdle for new developers is low the experience of the developers that are building clients using the APIs will be considered. The ability for a developer to easily understand and write code using the APIs in modern development environments should be facilitated by the API standards.
Technical Principles
These principles articulate specific technical outcomes that the API definitions should seek to deliver.
Principle 5: APIs are RESTful
The API standards will adhere to RESTful API concepts where possible and sensible to do so. In particular the concepts of statelessness and resource orientation will be followed.
Principle 6: APIs are implementation agnostic
The underlying implementation of the APIs should not be constrained or driven by the API definitions and standards. Conversely, the underlying implementation choices should not be visible or derivable to the client applications using the APIs.
Principle 7: APIs are simple
As complexity will increase implementation costs for both providers and clients as well as reduce the utility of the APIs, API definitions should seek to be as simple as possible but no simpler.
Principle 8: APIs are rich in capability
As the APIs are defined care should be taken to ensure that the data payloads defined represent rich data sets that can be used in many scenarios, including scenarios not necessarily front of mind during the design process.
Principle 9: APIs are performant
The API definitions should consider and incorporate performance implications during design ensuring that repeated calls are not necessary for simple use cases and that payload sizes do not introduce performance issues.
Principle 10: APIs are consistent
The API definitions across the full suite of APIs should be consistent with each other as much as possible. Where possible common data structures and patterns should be defined and reused.
Principle 11: APIs are version controlled and backwards compatible
As the API definitions evolve care will be taken to ensure the operation of existing clients are protected when breaking changes occur. Breaking changes will be protected by a well defined version control model and by a policy of whereby previous versions are maintained for a period of time to allow for backwards compatibility.
Principle 12: APIs are extensible
The API definitions and standards should be built for extensibility. This extensibility should accommodate future APIs categories and industry sectors but it should also allow for extension by data providers to create unique, value add offerings to the ecosystem.
Versioning
The standards have adopted a two level versioning strategy. The high level standards (including principles, URI structure, payload naming conventions, etc) be versioned and each API end point will have an additional version specific to that end point.
Standard Versioning
The base URI structure containing the version for this standard is:
http://<provider path>/cds-au/v1/<resource>
The high level standard will be versioned and this version will be in embedded in the URI Structure for the APIs. This documentation relates specifically to version 1 of the high level standards.
End Point Versioning
Each end point will have multiple versions independent of other end points. A specific end point version will be requested by a client using a HTTP header. This header will be supported by all end points under the API standards. See the section on HTTP Headers for more information on how versions are requested and supplied under the standards.
URI Structure
Some example URIs that meet this standard are:
http://www.bank.com.au/api/cds-au/v1/banking/accounts
http://www.bank.com.au/complex/uri/taxonomy/cds-au/v1/banking/products
http://www.energyretailer.com.au/api/cds-au/v1/energy/usage
The URI structure for API end points in the standards MUST be implemented as follows:
<provider path> / cds-au / <version> / <industry> / <resource>
The components of this URI structure are described as follows:
- Provider Path: The provider path is a base path set by the data provider. It can be any URI desired by the provider. While all authenticated end points must be accessible under the same provider path the data provider may stipulate a different provider path for unauthenticated end points.
- “cds-au”: This is a static string representing the end points defined by the Consumer Data Standards for Australia. This static string allows for separation from other APIs available at the same base provider path and also allows for extension if the standards are adopted by another jurisdiction in whole or in part.
- Version: The version of the high level standards. This is not the version of the endpoint or the payload being requested but the version of the overall standards being applied. This version number will be “v” followed by a the version as a positive integer (e.g. v1, v12 or v76).
- Industry: A static string used to separate APIs for a specific industry. As standards for new industries are defined the list of industry strings will be extended.
- Resource: The URI for the specific resource requested. This end point URI will be defined as part of the end point definitions for each API group.
Note that the currently accepted values for the Industry
component of the base path are:
- banking – for APIs related to banking and potentially wider financial services data
- energy – for APIs related to the energy distribution industry
- telco – for APIs related to telecommunications
- common – for APIs that potentially span industries
Resource URIs
Resources that are collections, and members of collections, will follow the JSONAPI.org recommendation.
Under this model collections, individual members and collection sub-resources would be accessed as follows:
The final example above represents a complex query accessed via a POST request. In this situation the POST URI should be applied to a sub-resource of the collection. A POST to a collection is reserved for the creation of a new collection member
If no valid sub-resource exists then a dedicated sub-resource should be created, such as the “search” URI listed in the example above.
HTTP Headers
Supported HTTP headers, and their usage, for the standards are as laid out in the following sections.
Request Headers
A sample set of headers requesting version 3 to 5:
Content-Type = application/json
Accept = application/json
x-v = 5
x-min-v = 3
x-Correlation-Id = 27639FAB67CC
| Header Field | Description |
|---|---|
| Content-Type | Standard HTTP Header. Represents the format of the payload provided in the request. Must be set to application/json . |
| Accept | Standard HTTP Header. Specify the Content-Type that is required from the Server. If specified, must be set to application/json unless otherwise specified in the resource end point standard.If set to an unacceptable value the provider must respond with a 406 Not Acceptable. If not specified, default is application/json . |
| x-v | Version of the API end point requested by the client. Must be set to a positive integer. If the version(s) requested is not supported then the provider should respond with a 406 Not Acceptable . |
| x-min-v | Minimum version of the API end point requested by the client. Must be set to a positive integer if provided. The provider should respond with the highest supported version between x-min-v and x-v .If all versions requested are not supported then the provider should respond with a 406 Not Acceptable . |
| x-<PID>-v | A provider specific version of extension fields. Should not be used in conjunction with x-min-v . |
| x-fapi-financial-id | The unique id of the data provider to which the request is issued. The unique id will be issued by the CDR Directory managed by ACCC. If the value does not match the expected value the data provider must reject the request with a 403 (Not Authorized) status code. |
| x-fapi-customer-last-logged-time | The time when the customer last logged in to the data recipient |
| x-fapi-customer-ip-address | The customer's original IP address if the customer is currently logged in to the data recipient. The presence of this header indicates that the API is being called in a customer present context |
| x-fapi-interaction-id | An RFC4122 UID used as a correlation id. If provided, the data provider must "play back" this value in the x-fapi-interaction-id response header. |
Response headers
| Header Field | Description | Mandatory? |
|---|---|---|
| Content-Type | Standard HTTP Header. Represents the format of the payload returned in the response. Must be application/json unless otherwise specified in the resource end point standard. |
Mandatory |
| Retry-After | Header indicating the time (in seconds) that the client should wait before retrying an operation. The provider should include this header along with responses with the HTTP status code of 429 Too many requests . |
Optional |
| x-v | The version of the API end point that the provider has responded with. | Mandatory |
| x-Correlation-Id | Reflected value of the correlation ID provided by the data consumer in the request headers. If no correlation ID was provided in the request this header should not be supplied. If a correlation ID was provided in the request then this header is mandatory. |
Optional |
| x-fapi-interaction-id | An RFC4122 UID used as a correlation id. The data provider must set the response header x-fapi-interaction-id to the value received from the corresponding fapi client request header or to a new RFC4122 UUID value if the request header was not provided to track the interaction. | Mandatory |
Additional Headers
Generally understood headers used in HTTP transactions to provide caching guidance and the use of the compression are not specified but are considered acceptable. It is at the discretion of the data provider if these headers are used for a specific implementation. Data providers should not require these headers for successful API access, however.
HTTP Response Codes
The handling and usage of HTTP response codes for the standards will be according to the following table.
| Situation | HTTP Status | Notes | POST | GET | DELETE |
|---|---|---|---|---|---|
| Query completed successfully | 200 OK | Yes | Yes | No | |
| Normal execution. The request has succeeded. | 201 Created | The operation results in the creation of a new resource. | Yes | No | No |
| Delete operation completed successfully | 204 No Content | No | No | Yes | |
| The response is not modified since last call | 304 Not Modified | May be returned if standard caching headers such as ETag or If-modified-since are utilised | Yes | Yes | No |
| Request has malformed, missing or non-compliant JSON body or URL parameters | 400 Bad Request | The requested operation will not be carried out. | Yes | Yes | Yes |
| Authorization header missing or invalid token | 401 Unauthorized | The operation was refused access. Re-authenticating may result in an appropriate token that may be used. | Yes | Yes | Yes |
| Token has incorrect scope or a security policy was violated. | 403 Forbidden | The operation was refused access. Re-authenticating is unlikely to remediate the situation. | Yes | Yes | Yes |
| The consumer tried to access the resource with a method that is not supported. | 405 Method Not Allowed | Yes | Yes | Yes | |
| The request contained an Accept header other than permitted media types, a character set other than UTF-8 or a version that was not supported | 406 Not Acceptable | Yes | Yes | Yes | |
| The operation was refused because the payload is in a format not supported by this method on the target resource. | 415 Unsupported Media Type | Yes | No | No | |
| The request was well formed but was unable to be processed due to business logic specific to the request | 422 Unprocessable Entity | If applicable to the HTTP method it is expected that this error will result in an error payload | Yes | No | No |
| The operation was refused as too many requests have been made within a certain timeframe. | 429 Too Many Requests | Throttling is a NFR. The data provider should include a Retry-After header in the response indicating how long the data consumer must wait before retrying the operation. | Yes | Yes | Yes |
| Something went wrong on the API gateway or micro-service | 500 Internal Server Error | The operation failed. | Yes | Yes | Yes |
| Service is currently unavailable | 503 Service Unavailable | Yes | Yes | Yes | |
| The server was unable to respond in a timely manner | 504 Gateway Timeout | Returned if a timeout has occurred but a resend of the original request is viable (otherwise us 500 instead) | Yes | Yes | Yes |
Payload Conventions
This section of the standard outlines the request and response payload structures for all API end points as well as the naming conventions for fields.
Request Payload Structure
A sample request would be structured as follows:
{
“data”: {
...
}
“meta”: {
...
}
}
Each API request payload MUST have a JSON object at the root level known as the root object. This object MUST contain a data
object to hold the primary data for the request.
The root object will contain a meta
object if, and only if, it is specifically REQUIRED by the end point. The meta object is used to provide additional information such as second factor authorisation data, traffic management, pagination counts or other purposes that are complementary to the workings of the API.
The definition of the contents for the data
object and meta
object will be defined separately for each end point.
Response Payload Structure
A sample successful response:
{
“data”: {
...
}
“links”: {
“self”: “...”
}
“meta”: {
...
}
}
A sample unsuccessful response:
{
“errors”: [
{
“code”: “...”,
“title”: “...”,
“detail”: “...”
}, {
“code”: “...”,
“title”: “...”,
“detail”: “...”,
“meta”: {
...
}
}
]
}
Each API request payload MUST have a JSON object at the root level known as the root object.
The contents of the root object are as follows:
- If the response is successful (200 OK) the root object:
- MUST contain a
data
object - MUST contain a
links
object - MAY contain a
meta
object if REQUIRED by the definition of the specific end point
- MUST contain a
- If the response is unsuccessful (not 200 OK) the root object:
- MUST contain an
errors
object
- MUST contain an
The definition of the contents for the data
object and meta
object will be defined separately for each end point.
The links
object will contain links to related API end points. This will include links to support pagination.
The links object MUST contain a field named self
that will have the fully qualified URI to the current request as a value.
The errors
object will be an array of zero or more unnamed objects. The fields in each of these objects will be as follows:
code
field MUST be present: holds an end point specific error codetitle
field MUST be present: holds a human readable label of the error that is constant per codedetail
field MUST be present: holds a human readable description of this specific errormeta
object MAY be present: holds additional end point specific data relevant to the error
Field Naming Conventions
Valid Characters In Field Names
All field names defined in either a request or response payload MUST be treated as case sensitive by clients and servers, and they MUST meet all of the following conditions:
- Member names MUST contain at least one character.
- Member names MUST contain only the allowed characters listed below:
- U+0061 to U+007A, a-z
- U+0041 to U+005A, A-Z
- U+0030 to U+0039, 0-9
- Additionally, the following characters are allowed in field names, except as the first or last character:
- U+002D HYPHEN-MINUS, '-'
- U+005F LOW LINE, '_'
- U+0024 DOLLAR SIGN, '$'
Any other character MUST NOT be used in field names.
Field Naming Style
Field names MUST be meaningful names with defined semantics.
Fields representing the same data in different payloads or different parts of a payload MUST have the same name.
Array types SHOULD have plural field names. All other field names SHOULD be singular.
Field names MUST be defined using camel case with the following clarifications:
- If a field name is a single acronym it SHOULD be lowercase
- If a field name contains an acronym along with other words it MAY be uppercase
- The first character in a field name SHOULD be lower case unless it is part of an acronym
Fields MUST NOT be named using reserved javascript tokens.
Maps
For JSON maps (i.e. key/value pairs) any Unicode character MAY be used as a field name and stylistic requirements do not apply.
Field Property Conventions
Field Data Types
Each field defined for the payloads of an end point MUST have an assigned data type.
The list of valid data types are set out in the common field types section. If a custom data type is required for a field then the field SHOULD be classified as a string with a clear description of how the property value is to be interpreted or defined.
Mandatory/Optional Fields
Each field defined for the payloads of an end point MUST have an assigned status of mandatory, optional or conditional.
Mandatory fields MUST be present and have a non-null value in a request or response payload for the payload to be considered valid.
Optional fields MAY be present but this is not guaranteed. It is also valid for these fields to be present but have a null value.
Conditional fields MUST have an associated conditional statement. If the conditional statement is true in a specific request or response the field is considered mandatory. If the conditional statement is false then the field is considered optional.
Empty/Null Fields
An empty field (ie. a field that is not present in a payload) will be considered equivalent with a field that is present with a null
value.
An empty string (“”
) is not considered to be equivalent to null
.
A Boolean value of false is not considered to be equivalent to null
. Optional Boolean fields, by implication, have three possible values: true, false and indeterminate (ie. null
).
Object conventions
Sample union object structure:
“data”: {
[
{
“shapeType”: “circle”,
“circle”: {
}
},
{
“shapeType”: “square”,
“square”: {
}
}
]
}
A specific convention will apply to union objects.
In the standards a union object is used in a situation where a set of data can be represented with different sets of fields depending on the context. To maintain strong typing of the fields one of a series of known object structures will be used. An example where this technique is used in the standard is in the definition of account balances where balance information can be represented differently, but unambiguously, for different account types.
For union objects an additional field, with a known suffix, is used to identify the object type that has been provided specifically.
As the name of this field is constant it can be used to perform an indirect lookup on the object type that has actually been provided removing the need to scan for which object is present.
A field of this type will always be specified with the suffix UType
meaning Union Type.
Common Field Types
The following table outlines the common data types for fields used in the standard.
| Type | Description | Valid Examples |
|---|---|---|
| String | Standard UTF-8 string but unrestricted in content. Any valid Unicode character can be used. | |
| ASCIIString | Standard UTF-8 string but limited to the ASCII character set. | |
| Boolean | Standard JSON boolean | true false |
| Enum | String representing an option from a defined list of values - All possible values should be provided - Values should be in all caps - Spaces should be replaced with under bars '_' - Values should be limited to the ASCII character set |
“OPTION1” “ANOTHER_OPTION” “VAL_ABC_123” |
| NaturalNumber | A natural number (ie. a positive integer inclusive of zero) | 0 1 10000 |
| PositiveInteger | A positive integer (zero excluded) | 1 10000 |
| NegativeInteger | A negative integer inclusive of zero | 0 -1 -10000 |
| Integer | Any positive or negative integer inclusive of zero | 1 0 -1 |
| Number | A standard floating point number. Can be positive, negative or zero | 0.1 -100.09 10 90.09 |
| DateTimeString | Combined Date and Time string as per RFC- 3339 (labelled date-time in the RFC) | “2007-05-01T15:43:00.12345Z” “2012-12-25T15:43:00-08:00” “1997-01-12T15:43:00.121Z” |
| DateString | Date string as per RFC-3339 (labelled full-date in the RFC). UTC time should always be used | “2007-05-01” “2012-12-25” |
| TimeString | Time string as per RFC-3339 (labelled full-time in the RFC). UTC time should always be used | “15:43:00.12345Z” “15:43:00-12:00” |
| CurrencyString | Standard 3 character currency codes as per ISO-4217 | “AUD” “USD” “GBP” |
| RateString | A string representing an interest rate. A rate of 100% would be represented by the value 1.0 - A positive number (or zero) - At least 1 and up to a total of 16 significant digits before decimal point - Up to 16 digits following the decimal point - No formatting, eg thousand separating commas |
“82” “0.05” “12.3456789” “99.123456789123” |
| AmountString | A string representing an amount of currency. - A positive, zero or negative number - Negative numbers identified with a ‘-‘ - No currency symbols should be supplied - At least 1 and up to a total of 16 significant digits before decimal point - Minimum 2 digits following a decimal point (more digits allowable but only if required) - No additional formatting, eg thousand separating commas |
“0.01” “10.00” “1234567.89” “-1001.23” “1.999” |
| MaskedPANString | Masked credit card number. Lower case ‘x’ should be used to mask numbers and only the last four digits should be exposed to facilitate identification. This type is expected to be used for display so the format should be logical for this context | "xxxx xxxx xxxx 1234" |
| MaskedAccountString | Masked bank account number genericised for a variety of account types. Should be represented as the full account number would normally be represented for display (including formatting) but with all digits except the last four replaced with a lowercase x. This type is expected to be used for display so the format should be logical for this context | "xxxx xxxx xxxx 1234" "xxx-xxx xxxxx1234" |
| URIString | A valid URI | "http://www.google.com" |
Pagination
Each API end point that can return multiple records will stipulate whether pagination is supported for the end point or not. For end points that will return less than a reasonably sized page of results in the majority of circumstances support for paging may not be included.
Note that the use of paging for an end point does not require or preclude the use of filtering query parameters. It is expected that filtering and paging will be applied independently of each other.
Query Parameters
The consumer will stipulate pagination requirements on the request using query parameters. When paging is supported the consumer MAY provide the following query parameters:
- page – the page number being requested (with the first page being 1)
- page-size – the number of records to return in each page
If the query parameters are not provided the following defaults will be assumed:
- page – a default of 1 (the first page) will be assumed
- page-size – a default of 25 will be assumed
Response Fields
In addition to the data requested a provider MUST provide the following additional information in the response payload:
- In the links object the following fields are to be provided:
- first - A URI to request the first page. This field MUST be present.
- last - A URI to request the last page. This field MUST be present unless there is only one page in the set.
- prev - A URI to the previous page. This field MUST be present unless the current page is the first page.
- next - A URI to the next page. This field MUST be present unless the current page is the final page.
- In the
meta
object the following fields are to be provided:- totalRecords - The total number of records in the set. This field MUST be present.
- totalPages - The total number of pages in the set. This field MUST be present.
For each of these fields the page size specified in the request should be assumed when calculating values.
Additional Pagination Rules
- Providers are not expected to implement pagination with transaction isolation. The underlying data-set may change between two subsequent requests. This may result in situations where the same transaction is returned on more than one page.
- A maximum page size of
1000
records is assumed for all end points (unless otherwise stipulated in the end point definition). If a page size greater than this maximum is requested then a HTTP status of422 Unprocessable Entity
SHOULD be returned.
Cursor Support
For performance reasons data providers may wish to support other pagination patterns such as cursors or continuation tokens. While the standard does not explicitly support these additional mechanisms it is considered allowable to implement these patterns and expose them via the pagination links.
In this scenario the URIs included in the links for other pages may not be compliant with the standard and may, instead, include other query parameters that support another pagination pattern. It is expected that all other pagination requirements such as link fields and meta fields will still be supported if other patterns are implemented.
To allow for a more performant implementation data consumers are encouraged to utilise pagination links wherever possible and only use constructed URIs for the first page or if random access to a specific set of records is required.
ID Permanence
Within these standards resource IDs are REQUIRED to comply with the following:
- An ID for a resource should only be specified in the API standard if an end point exists to obtain detail for that resource or to change the state of the resource.
- If an ID is specified in the standards for a resource then it is mandatory and MUST be supplied, by the data provider, in accordance with the standards.
- If an ID is specified the ID value MUST be entirely arbitrary and have no inherent meaning. For instance, an ID should not be a combination of other fields or a string that can be parsed to extract meaningful information.
- IDs SHOULD be unique but that uniqueness may be within a clearly bounded context. For example, a beneficiary ID may be unique but only in the context of a specific account. The bounds of uniqueness should be clearly described in the standards definition for the end point.
- IDs MUST be immutable across sessions but MUST NOT be transferable across data consumers. For example, data consumer A obtaining an account ID would get a different result from data consumer B obtaining the ID for the same account even if the same customer authorised the access. Under this constraint IDs cannot be usefully transferred between client organisations or providers.
- IDs MUST NOT be transferable between different customers for the same data consumer. For example, a data consumer should obtain a different ID for a joint account if the ID was obtained independently using authorisations from both customers.
- In payloads the field name of “id” should NEVER be used. Each ID field should be meaningfully named so that wherever that ID is used across multiple end points it always refers to the same ID set. For instance, the IDs for accounts would be represented in JSON in a field named “accountId”.
Extensibility
The Consumer Data Right standards will not cover all possible data sets or APIs that participants may wish to expose. Participants may also wish to innovate on top of the API standards by offering additional data to meet specific market opportunities. It is desirable that the standards not only allow for this to occur but actively encourage it with specific additions to the standards to enable such extension.
At the same time, it is important that a participant seeking to provide extensions does not hinder a data consumer that is only built for the published standards.
To accommodate these concerns the standards incorporate the following considerations specifically related to extension by data providers.
The three types of extension that the standards address are:
- Data provider offering entirely new API categories that are not covered by the API Standards
- Data provider offering additional end points to an API category that is already covered by the standards
- Data provider offering additional fields to the response payloads for an end point defined in the standards
Provider Identifier
For example, the prefixes for the four major Banks required to implement by 1st July 2019 would be:
- CBA – Commonwealth Bank
- WBC – Westpac Banking Corporation
- ANZ – ANZ Banking Group
- NAB – National Australia Bank
Data providers seeking to extend the standards MUST nominate a prefix to identify all extensions. Extended fields and end points and would use this prefix consistently. This prefix would be, by preference, the ASX symbol for the provider. Care should be taken not to use a prefix already adopted by another provider in the regime.
In these standards, where a Provider Identifier would be included, the term <PID>
will be used.
New API Categories
When extending by adding new API categories a provider MUST add these to the overall URI structure by substituting the industry element with the Provider ID.
For instance, the standard URI base path is structured as:
<provider path> / cds-au / <version> / <industry> / <resource>
For the extension API categories for a specific provider they would be structured as:
<provider path> / cds-au / <version> / <PID> / <resource>
The end points defined under this structure, including the payloads of these end points do not need to be prefixed in any way. The fact that they are underneath the provider section implies that they are additional to the standard.
Note that:
- This mechanism MUST NOT be used to create modified duplicates of the end points defined in the API Standards
- The end points in this area MUST comply with the standard's conventions and principles including naming conventions and data types.
New End Points In Existing API Categories
When creating new end points that are in parallel to existing API categories in the standard the Provider Identifier MUST be used to prefix the highest URI element where divergence occurs.
For example, assume an existing balance end point is defined as follows:
<base path>/accounts/{account ID}/transactions
and the provider wishes to add an end point that summarises balance movement for a specific time period then they may define the end point as:
<base path>/account/{account ID}/<PID>-balance-movement
Note that:
- The prefix is defined as the Provider Identifier followed by a hyphen.
- As the entire end point is new, the request and payload fields do not need to be prefixed in any way.
- Care should be taken to ensure there is no collision with an end point defined in the standards by specifying an extension at the same level as a variable URI element (such as at the same level of the {account ID} in the example above).
- If an end point has multiple levels in the resource path only the highest point where divergence with the standard occurs needs to be prefixed.
- The new end point MUST comply with standard's conventions and principles including naming conventions and data types.
Additional Fields In An Existing Response Payload
When adding a new field in an existing payload the field can be added to the JSON by prefixing the string <PID>-
.
If an object is being added as an extension only the highest level object name needs to be prefixed. Any fields inside the extended object can be named normally.
Note that:
- Existing fields MUST NOT be modified in any way. This includes adding new enumeration values to enum type fields.
- A mandatory field MUST NOT be made optional as the result of an extension.
- Request payloads can also be extended but the resulting end point should still execute successfully if the extension field is not present (by implication, extension fields in request payloads MUST be optional).
- New query parameters MAY be added along the same lines as a new field in a request payload (i.e. prefixed, non-mandatory and no side effects if not present).
- New headers MAY be added along the same lines as a new field in a request payload with the exception that the new header should be prefixed
x-<PID>-
. - New fields MUST comply with the naming conventions and data type standards used.
Additional Query Parameters
When adding support for a new query parameter to an existing end point that a data consumer is expected to supply the new parameter should be prefixed by the string <PID>-
to avoid potential collision with extension by another data provider.
Extension Versioning
As described previously in the versioning section the standard provides for multiple versions of each API end point. This implies the need for extensions to also be versioned.
An optional header x-<PID>-v
will be supported for all end points that can be used by the data consumer to request a specific version of extension fields to include in the response. See the section on HTTP Headers for more information on the use of this header.
Security
High Level Profile
Securing of the API end points defined by the standards will be accomplished through alignment with well defined industry protocols and security profiles. Context specific constraints are then applied to these profiles to provide implementation clarity or reduce risk.
In particular the standards are aligned to the Financial API (FAPI) Read/Wite profile.
Note that the FAPI Read/Write profile builds on the FAPI Read Only profile and implies alignment with the use of Open ID Connect.
Additional Constraints
The FAPI Read/Write profile implies specific implementation decisions that are worthy of explicit statement. There are also some additional, specific constraints are applicable for implementations conforming to these standards:
- Only the Hybrid Authorisation flow will be supported
- Public Clients will not be supported. All payload data will be transferred via backchannel communication
- Use of TLS mandated for all interactions
- Requirement to use TLS 1.2 or greater
- The version and configuration of TLS for implementations conforming with standards will not be a lower version, or less secure, than that of other digital channels deployed by the data provider
- A TLS server certificate check shall be performed, as per RFC 6125
- Mutual TLS will be used to secure back-channel communication between the data consumer and data provider
- For all interactions (except for authorisation) the cipher suites that may be used will be limited to:
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Authorisation Scopes
The following authorisation scopes have been defined for the standards. Each API end point will specify which scopes are required to access the data available via that end point.
| Scope Name | Scope ID | Description |
|---|---|---|
| Basic Bank Account Data | bank_basic_accounts | This scope would allow for the third party to access basic information of the customer’s accounts. Includes simple account information including balance. Does not include account identifiers, product information or transaction data. |
| Detailed Bank Account Data | bank_detailed_accounts | This scope would allow for the third party to access detailed information of the customer’s accounts. This scope is effectively additional authorisation to the Basic Bank Account Data scope. Granting this authorisation only makes sense if the Bank Account Data scope is also authorised. Includes basic account information plus account identifiers and product information. Does not include transaction data. |
| Bank Transaction Data | bank_transactions | This scope would allow the third party to access transaction data for accounts. This scope is effectively additional authorisation to the Basic Bank Account Data scope. Granting this authorisation only makes sense if the Basic Bank Account Data scope is also authorised. Includes all account transaction data. |
| Bank Payee Data | bank_payees | This scope allows access to payee information stored by the customer. Includes payee information such as billers, international beneficiaries and domestic payees. |
| Basic Customer Data | common_basic_customer | The scope would allow the third party to access personally identifiable information about the customer. For retail customers this would be information about the customer themselves. For business customers it would imply the name of specific user but also information about the business. Includes name and occupation for individuals or name, business numbers and industry code for organisations |
| Detailed Customer Data | common_detailed_customer | The scope would allow the third party to access more detailed information about the customer. Includes the data available with the Basic Customer Data scope plus contact details. Includes basic data plus phone, email and address information. |
| Public | NA | Openly accessible information. A customer would never need to grant this scope. This scope is included so that end points that can be called without requiring authorisation can be identified. Includes access to openly available information such as generic product information. |
OIDC Scopes & Claims
In addition to the Consumer Data Standards specific scopes above the following standard scopes and claims described by OpenID Connect core will be supported:
- openid scope
- profile scope
- name claim
- family_name claim
- given_name claim
Banking APIs
Get Accounts
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts
Obtain a list of accounts
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| open-status | query | string | false | Used to filter results according to open/closed status. Values can be OPEN, CLOSED or ALL. If absent then ALL is assumed |
| is-owned | query | string | false | Filters accounts based on whether they are owned by the authorised customer |
| product-category | query | string | false | Used to filter results on the productCategory field applicable to accounts. Any one of the valid values for this field can be supplied. If absent then all accounts returned. |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| open-status | OPEN |
| open-status | CLOSED |
| open-status | ALL |
| is-owned | OWNED |
| is-owned | NOT_OWNED |
| is-owned | ALL |
| product-category | PERS_AT_CALL_DEPOSITS |
| product-category | BUS_AT_CALL_DEPOSITS |
| product-category | TERM_DEPOSITS |
| product-category | RESIDENTIAL_MORTGAGES |
| product-category | PERS_CRED_AND_CHRG_CARDS |
| product-category | BUS_CRED_AND_CHRG_CARDS |
| product-category | PERS_LOANS |
| product-category | PERS_LEASING |
| product-category | BUS_LEASING |
| product-category | TRADE_FINANCE |
| product-category | PERS_OVERDRAFT |
| product-category | BUS_OVERDRAFT |
| product-category | BUS_LOANS |
| product-category | FOREIGN_CURR_AT_CALL_DEPOSITS |
| product-category | FOREIGN_CURR_TERM_DEPOSITS |
| product-category | FOREIGN_CURR_LOAN |
| product-category | FOREIGN_CURRRENCT_OVERDRAFT |
| product-category | TRAVEL_CARD |
Example responses
200 Response
{
"data": {
"accounts": [
{
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingAccounts |
Get Account Detail
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId} HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/{accountId}
Obtain detailed information on a single account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| accountId | path | string(ASCIIString) | true | A tokenised identifier for the account which is unique but not shareable |
Example responses
200 Response
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string",
"bsb": "string",
"accountNumber": "string",
"bundleName": "string",
"specificAccountUType": "termDeposit",
"termDeposit": {
"lodgementDate": "string",
"maturityDate": "string",
"maturityAmount": "string",
"maturityCurrency": "string",
"maturityInstructions": "ROLLED_OVER"
},
"creditCard": {
"minPaymentAmount": "string",
"paymentDueAmount": "string",
"paymentCurrency": "string",
"paymentDueDate": "string"
},
"loan": {
"originalStartDate": "string",
"originalLoanAmount": "string",
"originalLoanCurrency": "string",
"loanEndDate": "string",
"nextInstalmentDate": "string",
"minInstalmentAmount": "string",
"minInstalmentCurrency": "string",
"maxRedraw": "string",
"maxRedrawCurrency": "string",
"minRedraw": "string",
"minRedrawCurrency": "string",
"offsetAccountEnabled": true,
"offsetAccountIds": [
"string"
],
"repaymentFrequency": "string",
"repaymentType": "INTEREST_ONLY"
},
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"address": {
"addressUType": "simple",
"simple": {
"mailingName": "string",
"addressLine1": "string",
"addressLine2": "string",
"addressLine3": "string",
"postcode": "string",
"city": "string",
"state": "string",
"country": "string"
},
"paf": {
"dpid": "string",
"thoroughfareNumber1": 0,
"thoroughfareNumber1Suffix": "string",
"thoroughfareNumber2": 0,
"thoroughfareNumber2Suffix": "string",
"flatUnitNumber": "string",
"floorLevelNumber": "string",
"lotNumber": 0,
"buildingName1": "string",
"buildingName2": "string",
"streetName": "string",
"streetType": "string",
"streetSuffix": "string",
"postalDeliveryType": "string",
"postalDeliveryNumber": 0,
"postalDeliveryNumberPrefix": "string",
"postalDeliveryNumberSuffix": "string",
"localityName": "string",
"postcode": "string",
"state": "string"
}
}
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingAccount |
Get Bulk Balances
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/balances HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/balances',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/balances
Obtain balances for multiple, filtered accounts
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| open-status | query | string | false | Used to filter results according to open/closed status. Values can be OPEN, CLOSED or ALL. If absent then ALL is assumed |
| is-owned | query | string | false | Filters accounts based on whether they are owned by the authorised customer |
| product-category | query | string | false | Used to filter results on the productCategory field applicable to accounts. Any one of the valid values for this field can be supplied. If absent then all accounts returned. |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| open-status | OPEN |
| open-status | CLOSED |
| open-status | ALL |
| is-owned | OWNED |
| is-owned | NOT_OWNED |
| is-owned | ALL |
| product-category | PERS_AT_CALL_DEPOSITS |
| product-category | BUS_AT_CALL_DEPOSITS |
| product-category | TERM_DEPOSITS |
| product-category | RESIDENTIAL_MORTGAGES |
| product-category | PERS_CRED_AND_CHRG_CARDS |
| product-category | BUS_CRED_AND_CHRG_CARDS |
| product-category | PERS_LOANS |
| product-category | PERS_LEASING |
| product-category | BUS_LEASING |
| product-category | TRADE_FINANCE |
| product-category | PERS_OVERDRAFT |
| product-category | BUS_OVERDRAFT |
| product-category | BUS_LOANS |
| product-category | FOREIGN_CURR_AT_CALL_DEPOSITS |
| product-category | FOREIGN_CURR_TERM_DEPOSITS |
| product-category | FOREIGN_CURR_LOAN |
| product-category | FOREIGN_CURRRENCT_OVERDRAFT |
| product-category | TRAVEL_CARD |
Example responses
200 Response
{
"data": {
"balances": [
{
"accountId": "string",
"balanceUType": "deposit",
"deposit": {
"currentBalance": {
"amount": "string",
"currency": "string"
},
"availableBalance": {
"amount": "string",
"currency": "string"
}
},
"lending": {
"accountBalance": {
"amount": "string",
"currency": "string"
},
"availableBalance": {
"amount": "string",
"currency": "string"
},
"creditLimit": {
"amount": "string",
"currency": "string"
},
"amortisedLimit": {
"amount": "string",
"currency": "string"
}
},
"purses": [
{
"amount": "string",
"currency": "string"
}
]
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | resource listing the financial balances for the account | ResponseBankingAccountsBalances |
Get Balances For Specific Accounts
Code samples
POST https://data.provider.com.au/cds-au/v1/banking/accounts/balances HTTP/1.1
Host: data.provider.com.au
Content-Type: application/json
Accept: application/json
var headers = {
'Content-Type':'application/json',
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/balances',
method: 'post',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
POST /banking/accounts/balances
Obtain balances for a specified list of accounts
Body parameter
{
"data": {
"accountIds": [
"string"
]
},
"meta": {}
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | RequestAccountIds | true | The list of account IDs to obtain information for |
Example responses
200 Response
{
"data": {
"balances": [
{
"accountId": "string",
"balanceUType": "deposit",
"deposit": {
"currentBalance": {
"amount": "string",
"currency": "string"
},
"availableBalance": {
"amount": "string",
"currency": "string"
}
},
"lending": {
"accountBalance": {
"amount": "string",
"currency": "string"
},
"availableBalance": {
"amount": "string",
"currency": "string"
},
"creditLimit": {
"amount": "string",
"currency": "string"
},
"amortisedLimit": {
"amount": "string",
"currency": "string"
}
},
"purses": [
{
"amount": "string",
"currency": "string"
}
]
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingAccountsBalances |
| 422 | Unprocessable Entity | The request was well formed but was unable to be processed due to business logic specific to the request | ErrorList |
Get Transactions For Account
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/transactions HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/transactions',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/{accountId}/transactions
Obtain transactions for a specific account
Some general notes that apply to all end points that retrieve transactions:
- Where multiple transactions are returned transactions should be ordered according to effective date in descending order
- As the date and time for a transaction can alter depending on status and transaction type two separate date/times are included in the payload. There are still some scenarios where neither of these time stamps is available. For the purpose of filtering and ordering it is expected that the provider will use the “effective” date/time which will be defined as:
- Posted date/time if available, then
- Execution date/time if available, then
- A reasonable date/time nominated by the data provider using internal data structures
- For transaction amounts it should be assumed that a negative value indicates a reduction of the available balance on the account while a positive value indicates an increase in the available balance on the account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| accountId | path | string(ASCIIString) | true | ID of the account to get transactions for. Must have previously been returned by one of the account list end points. |
| start-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or after this date/time. If absent defaults to current time. Format is aligned to DateTimeString common type |
| end-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or before this date/time. If absent defaults to start-time plus 100 days. Format is aligned to DateTimeString common type |
| min-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts higher or equal to than this amount |
| max-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts less than or equal to than this amount |
| text | query | string | false | Filter transactions to only transactions where this string value is found as a substring of either the reference or description fields. Format is arbitrary ASCII string |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Example responses
200 Response
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"transactions": [
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingTransactions |
Get Transaction Detail
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/transactions/{transactionId} HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/transactions/{transactionId}',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/{accountId}/transactions/{transactionId}
Obtain detailed information on a transaction for a specific account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| accountId | path | string(ASCIIString) | true | The account id token that is used to uniquely represent the account |
| transactionId | path | string(ASCIIString) | true | The unique identifier for the specific transaction for which details are being requested |
Example responses
200 Response
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"transaction": [
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string",
"extendedData": {
"payer": "string",
"payee": "string",
"extensionUType": "extendedDescription",
"extendedDescription": "string",
"serviceId": "X2P1.01"
}
}
]
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingTransactionDetail |
Get Transactions For Multiple Accounts
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/transactions HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/transactions',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/transactions
Obtain transactions for multiple, filtered accounts
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| open-status | query | string | false | Used to filter results according to open/closed status. Values can be OPEN, CLOSED or ALL. If absent then ALL is assumed |
| is-owned | query | string | false | Filters accounts based on whether they are owned by the authorised customer |
| product-category | query | string | false | Used to filter results on the productCategory field applicable to accounts. Any one of the valid values for this field can be supplied. If absent then all accounts returned. |
| start-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or after this date/time. If absent defaults to current time. Format is aligned to DateTimeString common type |
| end-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or before this date/time. If absent defaults to start-time plus 100 days. Format is aligned to DateTimeString common type |
| min-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts higher or equal to than this amount |
| max-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts less than or equal to than this amount |
| text | query | string | false | Filter transactions to only transactions where this string value is found as a substring of either the reference or description fields. Format is arbitrary ASCII string |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| open-status | OPEN |
| open-status | CLOSED |
| open-status | ALL |
| is-owned | OWNED |
| is-owned | NOT_OWNED |
| is-owned | ALL |
| product-category | PERS_AT_CALL_DEPOSITS |
| product-category | BUS_AT_CALL_DEPOSITS |
| product-category | TERM_DEPOSITS |
| product-category | RESIDENTIAL_MORTGAGES |
| product-category | PERS_CRED_AND_CHRG_CARDS |
| product-category | BUS_CRED_AND_CHRG_CARDS |
| product-category | PERS_LOANS |
| product-category | PERS_LEASING |
| product-category | BUS_LEASING |
| product-category | TRADE_FINANCE |
| product-category | PERS_OVERDRAFT |
| product-category | BUS_OVERDRAFT |
| product-category | BUS_LOANS |
| product-category | FOREIGN_CURR_AT_CALL_DEPOSITS |
| product-category | FOREIGN_CURR_TERM_DEPOSITS |
| product-category | FOREIGN_CURR_LOAN |
| product-category | FOREIGN_CURRRENCT_OVERDRAFT |
| product-category | TRAVEL_CARD |
Example responses
200 Response
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"transactions": [
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingTransactions |
Get Transactions For Specific Accounts
Code samples
POST https://data.provider.com.au/cds-au/v1/banking/accounts/transactions HTTP/1.1
Host: data.provider.com.au
Content-Type: application/json
Accept: application/json
var headers = {
'Content-Type':'application/json',
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/transactions',
method: 'post',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
POST /banking/accounts/transactions
Obtain transactions for a specified list of transactions.
Body parameter
{
"data": {
"accountIds": [
"string"
]
},
"meta": {}
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| start-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or after this date/time. If absent defaults to current time. Format is aligned to DateTimeString common type |
| end-time | query | string(DateTimeString) | false | Constrain the transaction history request to transactions with effective time at or before this date/time. If absent defaults to start-time plus 100 days. Format is aligned to DateTimeString common type |
| min-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts higher or equal to than this amount |
| max-amount | query | string(AmountString) | false | Filter transactions to only transactions with amounts less than or equal to than this amount |
| text | query | string | false | Filter transactions to only transactions where this string value is found as a substring of either the reference or description fields. Format is arbitrary ASCII string |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
| body | body | RequestAccountIds | true | The list of account IDs to obtain information for |
Example responses
200 Response
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"transactions": [
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingTransactions |
| 422 | Unprocessable Entity | The request was well formed but was unable to be processed due to business logic specific to the request | ErrorList |
Get Direct Debits For Account
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/direct-debits HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/{accountId}/direct-debits',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/{accountId}/direct-debits
Obtain direct debit authorisations for a specific account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| accountId | path | string(ASCIIString) | true | ID of the account to get direct debit authorisations for. Must have previously been returned by one of the account list end points. |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Example responses
200 Response
{
"data": {
"directDebitAuthorisations": [
{
"accountId": "string",
"authorisedEntity": {
"name": "string",
"financialInstitution": "string",
"abn": "string",
"acn": "string",
"arbn": "string"
},
"lastDebitDateTime": "string",
"lastDebitAmount": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingDirectDebits |
Get Bulk Direct Debits
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/accounts/direct-debits HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/direct-debits',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/accounts/direct-debits
Obtain direct debit authorisations for multiple, filtered accounts
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| is-owned | query | string | false | Filters accounts based on whether they are owned by the authorised customer |
| product-category | query | string | false | Used to filter results on the productCategory field applicable to accounts. Any one of the valid values for this field can be supplied. If absent then all accounts returned. |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| is-owned | OWNED |
| is-owned | NOT_OWNED |
| is-owned | ALL |
| product-category | PERS_AT_CALL_DEPOSITS |
| product-category | BUS_AT_CALL_DEPOSITS |
| product-category | TERM_DEPOSITS |
| product-category | RESIDENTIAL_MORTGAGES |
| product-category | PERS_CRED_AND_CHRG_CARDS |
| product-category | BUS_CRED_AND_CHRG_CARDS |
| product-category | PERS_LOANS |
| product-category | PERS_LEASING |
| product-category | BUS_LEASING |
| product-category | TRADE_FINANCE |
| product-category | PERS_OVERDRAFT |
| product-category | BUS_OVERDRAFT |
| product-category | BUS_LOANS |
| product-category | FOREIGN_CURR_AT_CALL_DEPOSITS |
| product-category | FOREIGN_CURR_TERM_DEPOSITS |
| product-category | FOREIGN_CURR_LOAN |
| product-category | FOREIGN_CURRRENCT_OVERDRAFT |
| product-category | TRAVEL_CARD |
Example responses
200 Response
{
"data": {
"directDebitAuthorisations": [
{
"accountId": "string",
"authorisedEntity": {
"name": "string",
"financialInstitution": "string",
"abn": "string",
"acn": "string",
"arbn": "string"
},
"lastDebitDateTime": "string",
"lastDebitAmount": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingDirectDebits |
Get Direct Debits For Specific Accounts
Code samples
POST https://data.provider.com.au/cds-au/v1/banking/accounts/direct-debits HTTP/1.1
Host: data.provider.com.au
Content-Type: application/json
Accept: application/json
var headers = {
'Content-Type':'application/json',
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/accounts/direct-debits',
method: 'post',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
POST /banking/accounts/direct-debits
Obtain direct debit authorisations for a specified list of accounts
Body parameter
{
"data": {
"accountIds": [
"string"
]
},
"meta": {}
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | RequestAccountIds | true | The list of account IDs to obtain information for |
Example responses
200 Response
{
"data": {
"directDebitAuthorisations": [
{
"accountId": "string",
"authorisedEntity": {
"name": "string",
"financialInstitution": "string",
"abn": "string",
"acn": "string",
"arbn": "string"
},
"lastDebitDateTime": "string",
"lastDebitAmount": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingDirectDebits |
| 422 | Unprocessable Entity | The request was well formed but was unable to be processed due to business logic specific to the request | ErrorList |
Get Payees
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/payees HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/payees',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/payees
Obtain a list of pre-registered payees
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| type | query | string | false | Filter on the payee type field. In addition to normal type field values, ALL can be specified to retrieve all payees. If absent the assumed value is ALL |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| type | DOMESTIC |
| type | INTERNATIONAL |
| type | BILLER |
Example responses
200 Response
{
"data": {
"payees": [
{
"payeeId": "string",
"nickname": "string",
"description": "string",
"type": "DOMESTIC",
"creationDate": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingPayees |
Get Payee Detail
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/payees/{payeeId} HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/payees/{payeeId}',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/payees/{payeeId}
Obtain detailed information on a single payee
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| payeeId | path | string(ASCIIString) | true | The ID used to locate the details of a particular payee |
Example responses
200 Response
{
"data": {
"payeeId": "string",
"nickname": "string",
"description": "string",
"type": "DOMESTIC",
"creationDate": "string",
"payeeUType": "domestic",
"domestic": {
"payeeAccountUType": "account",
"account": {
"accountName": "string",
"bsb": "string",
"accountNumber": "string"
},
"card": {
"cardNumber": "string"
},
"payId": {
"name": "string",
"identifier": "string",
"type": "EMAIL"
}
},
"biller": {
"billerCode": "string",
"crn": "string",
"billerName": "string"
},
"international": {
"beneficiaryDetails": {
"name": "string",
"country": "string",
"message": "string"
},
"bankDetails": {
"country": "string",
"accountNumber": "string",
"bankAddress": {
"name": "string",
"address": "string"
},
"beneficiaryBankBIC": "string",
"fedWireNumber": "string",
"sortCode": "string",
"chipNumber": "string",
"routingNumber": "string",
"legalEntityIdentifier": "string"
}
}
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingPayeeDetails |
Get Products
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/products HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/products',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/products
Obtain a list of products that are currently openly offered to the market
Note that the results returned by this end point are expected to be ordered according to updated-since
Conventions
In the product reference payloads there are a number of recurring conventions that are explained here, in one place.
Arrays Of Features
In the product detail payload there are a number of arrays articulating generic features, constraints, prices, etc. The intent of these arrays is as follows:
- Each element in an array has the same structure so that clients can reliably interpret the payloads
- Each element as a type element that is an enumeration of the specific aspect of a product being described, such as types of fees.
- Each element has a field name additionalValue. This is a generic field with contents that will vary based on the type of object being described. The contents of this field for the ADDITIONAL_CARDS feature is the number of cards allowed while the contents of this field for the MAX_LIMIT constraint would be the maximum credit limit allowed for the product.
- An element in these arrays of the same type may appear more than once. For instance, a product may offer two separate loyalty programs that the customer can select from. A fixed term mortgage may have different rates for different term lengths.
- An element in these arrays may contain an additionalInfo and additionalInfoUri field. The additionalInfo field is used to provide displayable text clarifying the purpose of the element in some way when the product is presented to a customer. The additionalInfoUri provides a link to externally hosted information specifically relevant to that feature of the product.
URIs To More Information
As the complexities and nuances of a financial product can not easily be fully expressed in a data structure without a high degree of complexity it is necessary to provide additional reference information that a potential customer can access so that they are fully informed of the features and implications of the product. The payloads for product reference therefore contain numerous fields that are provided to allow the product provider to describe the product more fully using a web page hosted on their on channels.
These URIs do not need to all link to different pages. If desired, they can all link to a single hosted page and use difference HTML anchors to focus on a specific topic such as eligibility or fees.
Linkage To Accounts
From the moment that a customer applies for a product and an account is created the account and the product that spawned it will diverge. Rates and features of the product may change and a discount may be negotiated for the account.
For this reason productCategory is a common field between accounts and products but there is not common linkage field specific to a product that appears within the account payloads.
Similarly, many of the fields and objects in the product payload will appear in the account detail payload but the full sets of options are not identical between the two entities.
Dates
It is expected that data consumers needing this data will call relatively frequently to ensure the data they have is representative of the current offering from a bank. To minimise the volume and frequency of these calls the ability to set a lastUpdated field with the date and time of the last update to this product is included. A call for a list of products can then be filtered to only return products that have been updated since the last time that data was obtained.
In addition the concept of effective date and time has also been included. This allows for a product to be marked for obsolescence, or introduction, from a certain time without the need for an update to show that a product has been changed. The inclusion of these dates also removes the need to represent deleted products in the payload. Products that are no long offered can be marked not effective for a few weeks before they are then removed from the product set as an option entirely.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| effective | query | string | false | Allows for the filtering of products based on whether the current time is within the period of time defined as effective by the effectiveFrom and effectiveTo fields. If absent defaults to 'CURRENT' |
| updated-since | query | string(DateTimeString) | false | Only include products that have been updated after the specified date and time. If absent defaults to include all products |
| brand | query | string | false | Filter results based on a specific brand |
| product-category | query | string | false | Used to filter results on the productCategory field applicable to accounts. Any one of the valid values for this field can be supplied. If absent then all accounts returned. |
| page | query | integer | false | Page of results to request (standard pagination) |
| page-size | query | integer | false | Page size to request. Default is 25 (standard pagination) |
Enumerated Values
| Parameter | Value |
|---|---|
| effective | CURRENT |
| effective | FUTURE |
| effective | ALL |
| product-category | PERS_AT_CALL_DEPOSITS |
| product-category | BUS_AT_CALL_DEPOSITS |
| product-category | TERM_DEPOSITS |
| product-category | RESIDENTIAL_MORTGAGES |
| product-category | PERS_CRED_AND_CHRG_CARDS |
| product-category | BUS_CRED_AND_CHRG_CARDS |
| product-category | PERS_LOANS |
| product-category | PERS_LEASING |
| product-category | BUS_LEASING |
| product-category | TRADE_FINANCE |
| product-category | PERS_OVERDRAFT |
| product-category | BUS_OVERDRAFT |
| product-category | BUS_LOANS |
| product-category | FOREIGN_CURR_AT_CALL_DEPOSITS |
| product-category | FOREIGN_CURR_TERM_DEPOSITS |
| product-category | FOREIGN_CURR_LOAN |
| product-category | FOREIGN_CURRRENCT_OVERDRAFT |
| product-category | TRAVEL_CARD |
Example responses
200 Response
{
"data": {
"products": [
{
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
}
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingProducts |
Get Product Detail
Code samples
GET https://data.provider.com.au/cds-au/v1/banking/products/{productId} HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/banking/products/{productId}',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /banking/products/{productId}
Obtain detailed information on a single product offered openly to the market
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| productId | path | string(ASCIIString) | true | ID of the specific product requested |
Example responses
200 Response
{
"data": {
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
},
"bundles": [
{
"name": "string",
"description": "string",
"additionalInfoUri": "string",
"productIds": [
"string"
]
}
],
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"constraints": [
{
"constraintType": "MIN_BALANCE",
"additionalValue": "string"
}
],
"eligibility": [
{
"eligibilityType": "BUSINESS",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
]
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseBankingProduct |
Common APIs
Get Customer
Code samples
GET https://data.provider.com.au/cds-au/v1/common/customer HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/common/customer',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /common/customer
Obtain basic information on the customer that has authorised the current session
Example responses
200 Response
{
"data": {
"customerUType": "person",
"person": {
"lastUpdateTime": "string",
"firstName": "string",
"lastName": "string",
"middleNames": [
"string"
],
"prefix": "string",
"suffix": "string",
"occupationCode": "string"
},
"organisation": {
"lastUpdateTime": "string",
"agentFirstName": "string",
"agentLastName": "string",
"agentRole": "string",
"businessName": "string",
"legalName": "string",
"shortName": "string",
"abn": "string",
"acn": "string",
"isACNCRegistered": true,
"industryCode": "string",
"organisationType": "SOLE_TRADER",
"registeredCountry": "string",
"establishmentDate": "string"
}
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseCommonCustomer |
Get Customer Detail
Code samples
GET https://data.provider.com.au/cds-au/v1/common/customer/detail HTTP/1.1
Host: data.provider.com.au
Accept: application/json
var headers = {
'Accept':'application/json'
};
$.ajax({
url: 'https://data.provider.com.au/cds-au/v1/common/customer/detail',
method: 'get',
headers: headers,
success: function(data) {
console.log(JSON.stringify(data));
}
})
GET /common/customer/detail
Obtain detailed information on the authorised customer within the current session.
Example responses
200 Response
{
"data": {
"customerUType": "person",
"person": {
"lastUpdateTime": "string",
"firstName": "string",
"lastName": "string",
"middleNames": [
"string"
],
"prefix": "string",
"suffix": "string",
"occupationCode": "string",
"phoneNumbers": [
{
"isPreferred": true,
"purpose": "MOBILE",
"countryCode": "string",
"areaCode": "string",
"number": "string",
"extension": "string",
"fullNumber": "string"
}
],
"emailAddresses": [
{
"isPreferred": true,
"purpose": "WORK",
"address": "string"
}
],
"physicalAddresses": [
{
"purpose": "REGISTERED",
"addressUType": "simple",
"simple": {
"mailingName": "string",
"addressLine1": "string",
"addressLine2": "string",
"addressLine3": "string",
"postcode": "string",
"city": "string",
"state": "string",
"country": "string"
},
"paf": {
"dpid": "string",
"thoroughfareNumber1": 0,
"thoroughfareNumber1Suffix": "string",
"thoroughfareNumber2": 0,
"thoroughfareNumber2Suffix": "string",
"flatUnitNumber": "string",
"floorLevelNumber": "string",
"lotNumber": 0,
"buildingName1": "string",
"buildingName2": "string",
"streetName": "string",
"streetType": "string",
"streetSuffix": "string",
"postalDeliveryType": "string",
"postalDeliveryNumber": 0,
"postalDeliveryNumberPrefix": "string",
"postalDeliveryNumberSuffix": "string",
"localityName": "string",
"postcode": "string",
"state": "string"
}
}
]
},
"organisation": {
"lastUpdateTime": "string",
"agentFirstName": "string",
"agentLastName": "string",
"agentRole": "string",
"businessName": "string",
"legalName": "string",
"shortName": "string",
"abn": "string",
"acn": "string",
"isACNCRegistered": true,
"industryCode": "string",
"organisationType": "SOLE_TRADER",
"registeredCountry": "string",
"establishmentDate": "string",
"physicalAddresses": [
{
"purpose": "REGISTERED",
"addressUType": "simple",
"simple": {
"mailingName": "string",
"addressLine1": "string",
"addressLine2": "string",
"addressLine3": "string",
"postcode": "string",
"city": "string",
"state": "string",
"country": "string"
},
"paf": {
"dpid": "string",
"thoroughfareNumber1": 0,
"thoroughfareNumber1Suffix": "string",
"thoroughfareNumber2": 0,
"thoroughfareNumber2Suffix": "string",
"flatUnitNumber": "string",
"floorLevelNumber": "string",
"lotNumber": 0,
"buildingName1": "string",
"buildingName2": "string",
"streetName": "string",
"streetType": "string",
"streetSuffix": "string",
"postalDeliveryType": "string",
"postalDeliveryNumber": 0,
"postalDeliveryNumberPrefix": "string",
"postalDeliveryNumberSuffix": "string",
"localityName": "string",
"postcode": "string",
"state": "string"
}
}
]
}
},
"links": {
"self": "string"
},
"meta": {}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Success | ResponseCommonCustomerDetailed |
Shared Schemas
RequestAccountIds
{
"data": {
"accountIds": [
"string"
]
},
"meta": {}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | object | true | none | none |
| » accountIds | [string] | true | none | none |
| meta | Meta | true | none | none |
ResponseBankingProducts
{
"data": {
"products": [
{
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
}
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | object | true | none | none |
| » products | [Product] | true | none | none |
| links | LinksPaginated | true | none | none |
| meta | MetaPaginated | true | none | none |
Product
{
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| productId | string(ASCIIString) | true | none | A provider specific unique identifier for this product. This identifier must be unique to a product but does not otherwise need to adhere to ID permanence guidelines. |
| effectiveFrom | string(DateTimeString) | false | none | The date and time from which this product is effective (ie. is available for origination). Used to enable the articulation of products to the regime before they are available for customers to originate |
| effectiveTo | string(DateTimeString) | false | none | The date and time at which this product will be retired and will no longer be offered. Used to enable the managed deprecation of products |
| lastUpdated | string(DateTimeString) | true | none | The last date and time that the information for this product was changed (or the creation date for the product if it has never been altered) |
| productCategory | EnumProductCategory | true | none | The list of available product categories for categorising products and accounts |
| name | string | true | none | The display name of the product |
| description | string | true | none | A description of the product |
| brand | string | true | none | A label of the brand for the product. Able to be used for filtering. For data providers with single brands this value is still required |
| brandName | string | false | none | An optional display name of the brand |
| applicationUri | string(URIString) | false | none | A link to the an application web page where this product can be applied for. |
| isTailored | boolean | true | none | Indicates whether the product is specifically tailored to a circumstance. In this case fees and prices are significantly negotiated depending on context. While all products are open to a degree of tailoring this flag indicates that tailoring is expected and thus that the provision of specific fees and rates is not applicable |
| additionalInformation | object | false | none | none |
| » overviewUri | string(URIString) | false | none | General overview of the product |
| » termsUri | string(URIString) | false | none | Terms and conditions for the product |
| » eligibilityUri | string(URIString) | false | none | Eligibility rules and criteria for the product |
| » feesAndPricingUri | string(URIString) | false | none | Description of fees, pricing, discounts, exemptions and bonuses for the product |
| » bundleUri | string(URIString) | false | none | Description of a bundle that this product can be part of |
ResponseBankingProduct
{
"data": {
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
},
"bundles": [
{
"name": "string",
"description": "string",
"additionalInfoUri": "string",
"productIds": [
"string"
]
}
],
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"constraints": [
{
"constraintType": "MIN_BALANCE",
"additionalValue": "string"
}
],
"eligibility": [
{
"eligibilityType": "BUSINESS",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
]
},
"links": {
"self": "string"
},
"meta": {}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | ProductDetail | true | none | none |
| links | Links | true | none | none |
| meta | Meta | true | none | none |
ProductDetail
{
"productId": "string",
"effectiveFrom": "string",
"effectiveTo": "string",
"lastUpdated": "string",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"name": "string",
"description": "string",
"brand": "string",
"brandName": "string",
"applicationUri": "string",
"isTailored": true,
"additionalInformation": {
"overviewUri": "string",
"termsUri": "string",
"eligibilityUri": "string",
"feesAndPricingUri": "string",
"bundleUri": "string"
},
"bundles": [
{
"name": "string",
"description": "string",
"additionalInfoUri": "string",
"productIds": [
"string"
]
}
],
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"constraints": [
{
"constraintType": "MIN_BALANCE",
"additionalValue": "string"
}
],
"eligibility": [
{
"eligibilityType": "BUSINESS",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
]
}
Properties
allOf
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| anonymous | Product | false | none | none |
and
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| anonymous | object | false | none | none |
| » bundles | [ProductBundles] | false | none | none |
| » features | [ProductFeatures] | false | none | none |
| » constraints | [ProductConstraints] | false | none | none |
| » eligibility | [ProductEligibility] | false | none | none |
| » fees | [ProductFees] | false | none | none |
| » depositRates | [ProductDepositRates] | false | none | none |
| » lendingRates | [ProductLendingRates] | false | none | none |
ProductBundles
{
"name": "string",
"description": "string",
"additionalInfoUri": "string",
"productIds": [
"string"
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| name | string | true | none | Name of the bundle |
| description | string | true | none | Description of the bundle |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on the bundle criteria and benefits |
| productIds | [string] | true | none | Array of product IDs for products included in the bundle |
ProductFeatures
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| featureType | string | true | none | The type of feature described |
| additionalValue | string | false | none | Generic field containing additional information relevant to the featureType specified. Whether mandatory or not is dependent on the value of featureType |
Enumerated Values
| Property | Value |
|---|---|
| featureType | CARD_ACCESS |
| featureType | ADDITIONAL_CARDS |
| featureType | UNLIMITED_TXNS |
| featureType | FREE_TXNS |
| featureType | FREE_TXNS_ALLOWANCE |
| featureType | LOYALTY_PROGRAM |
| featureType | OFFSET |
| featureType | OVERDRAFT |
| featureType | REDRAW |
| featureType | INSURANCE |
| featureType | BALANCE_TRANSFERS |
| featureType | INTEREST_FREE |
| featureType | INTEREST_FREE_TRANSFERS |
| featureType | DIGITAL_WALLET |
| featureType | DIGITAL_BANKING |
| featureType | NPP_PAYID |
| featureType | NPP_ENABLED |
| featureType | DONATE_INTEREST |
| featureType | BILL_PAYMENT |
ProductConstraints
{
"constraintType": "MIN_BALANCE",
"additionalValue": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| constraintType | string | true | none | The type of constraint described. See the next section for an overview of valid values and their meaning |
| additionalValue | string | false | none | Generic field containing additional information relevant to the constraintType specified. Whether mandatory or not is dependent on the value of constraintType |
Enumerated Values
| Property | Value |
|---|---|
| constraintType | MIN_BALANCE |
| constraintType | OPENING_BALANCE |
| constraintType | MAX_LIMIT |
| constraintType | MIN_LIMIT |
ProductEligibility
{
"eligibilityType": "BUSINESS",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| eligibilityType | string | true | none | The type of eligibility criteria described. See the next section for an overview of valid values and their meaning |
| additionalValue | string | false | none | Generic field containing additional information relevant to the eligibilityType specified. Whether mandatory or not is dependent on the value of eligibilityType |
| additionalInfo | string | false | none | Display text providing more information on the eligibility criteria. Mandatory if the eligibilityType field is set to OTHER |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this eligibility criteria |
Enumerated Values
| Property | Value |
|---|---|
| eligibilityType | BUSINESS |
| eligibilityType | PENSION_RECIPIENT |
| eligibilityType | MIN_AGE |
| eligibilityType | MAX_AGE |
| eligibilityType | MIN_INCOME |
| eligibilityType | MIN_TURNOVER |
| eligibilityType | STAFF |
| eligibilityType | STUDENT |
| eligibilityType | EMPLOYMENT_STATUS |
| eligibilityType | RESIDENCY_STATUS |
| eligibilityType | OTHER |
ProductFees
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| name | string | true | none | Name of the fee |
| feeType | string | true | none | The type of fee |
| amount | string(AmountString) | false | none | The amount charged for the fee. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| balanceRate | string(RateString) | false | none | A fee rate calculated based on a proportion of the balance. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| transactionRate | string(RateString) | false | none | A fee rate calculated based on a proportion of a transaction. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| currency | string(CurrencyString) | false | none | The currency the fee will be charged in. Assumes AUD if absent |
| additionalValue | string | false | none | Generic field containing additional information relevant to the feeType specified. Whether mandatory or not is dependent on the value of feeType |
| additionalInfo | string | false | none | Display text providing more information on the fee |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
| discounts | [ProductDiscounts] | false | none | none |
Enumerated Values
| Property | Value |
|---|---|
| feeType | PERIODIC |
| feeType | TRANSACTION |
| feeType | ESTABLISHMENT |
| feeType | EXIT |
| feeType | OVERDRAW |
| feeType | MIN_BALANCE |
| feeType | REDRAW |
| feeType | CHEQUE_CASH |
| feeType | CHEQUE_STOP |
| feeType | CHEQUE_BOOK |
| feeType | CARD_REPLACE |
| feeType | PAPER_STATEMENT |
| feeType | OTHER_EVENT |
ProductDiscounts
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| description | string | true | none | Description of the discount |
| discountType | string | true | none | The type of discount. See the next section for an overview of valid values and their meaning |
| amount | string(AmountString) | true | none | Value of the discount. Note that the currency of the fee discount is expected to be the same as the currency of the fee itself |
| additionalValue | string | false | none | Generic field containing additional information relevant to the discountType specified. Whether mandatory or not is dependent on the value of discountType |
Enumerated Values
| Property | Value |
|---|---|
| discountType | BALANCE |
| discountType | DEPOSITS |
| discountType | PAYMENTS |
| discountType | BUNDLE |
ProductDepositRates
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| depositRateType | string | true | none | The type of rate (base, bonus, etc). See the next section for an overview of valid values and their meaning |
| rate | string(RateString) | true | none | The rate to be applied |
| additionalValue | string | false | none | Generic field containing additional information relevant to the depositRateType specified. Whether mandatory or not is dependent on the value of depositRateType |
| additionalInfo | string | false | none | Display text providing more information on the fee |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
Enumerated Values
| Property | Value |
|---|---|
| depositRateType | FIXED |
| depositRateType | BONUS |
| depositRateType | BUNDLE_BONUS |
| depositRateType | VARIABLE |
| depositRateType | INTRODUCTORY |
ProductLendingRates
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| lendingRateType | string | true | none | The type of rate (fixed, variable, etc). See the next section for an overview of valid values and their meaning |
| rate | string(RateString) | true | none | The rate to be applied |
| additionalValue | string | false | none | Information relevant to the lendingRateType specified. Whether mandatory or not is dependent on the Generic field containing additional information relevant to the lendingRateType specified. Whether mandatory or not is dependent on the value of lendingRateType |
| additionalInfo | string | false | none | Display text providing more information on the fee. |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
Enumerated Values
| Property | Value |
|---|---|
| lendingRateType | FIXED |
| lendingRateType | INTRODUCTORY |
| lendingRateType | DISCOUNT |
| lendingRateType | PENALTY |
| lendingRateType | BUNDLE_DISCOUNT |
| lendingRateType | FLOATING |
| lendingRateType | MARKET_LINKED |
| lendingRateType | CASH_ADVANCE |
| lendingRateType | VARIABLE |
| lendingRateType | COMPARISON |
ResponseBankingAccounts
{
"data": {
"accounts": [
{
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | object | true | none | none |
| » accounts | [Account] | true | none | none |
| links | LinksPaginated | true | none | none |
| meta | MetaPaginated | true | none | none |
Account
{
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| accountId | string(ASCIIString) | true | none | A unique ID of the account adhering to the standards for ID permanence |
| displayName | string | true | none | The display name of the account. If a customer provided nickname is available that value should be returned |
| nickname | string | false | none | A customer supplied nick name for the account |
| maskedNumber | string(MaskedAccountString) | true | none | A masked version of the account. Whether BSB/Account Number, Credit Card PAN or another number this should be formatted with each digit masked and the last three digits unmasked |
| openStatus | string | false | none | Open or closed status for the account. If not present then OPEN is assumed |
| isOwned | boolean | false | none | Flag indicating that the customer associated with the authorisation is an owner of the account. Does not indicate sole ownership, however. If no present then 'true' is assumed |
| productCategory | EnumProductCategory | true | none | The list of available product categories for categorising products and accounts |
| productName | string | true | none | A unique name or identifier for the account class for this account as defined by the account provider. Not expected to be used for display |
Enumerated Values
| Property | Value |
|---|---|
| openStatus | OPEN |
| openStatus | CLOSED |
ResponseBankingAccount
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string",
"bsb": "string",
"accountNumber": "string",
"bundleName": "string",
"specificAccountUType": "termDeposit",
"termDeposit": {
"lodgementDate": "string",
"maturityDate": "string",
"maturityAmount": "string",
"maturityCurrency": "string",
"maturityInstructions": "ROLLED_OVER"
},
"creditCard": {
"minPaymentAmount": "string",
"paymentDueAmount": "string",
"paymentCurrency": "string",
"paymentDueDate": "string"
},
"loan": {
"originalStartDate": "string",
"originalLoanAmount": "string",
"originalLoanCurrency": "string",
"loanEndDate": "string",
"nextInstalmentDate": "string",
"minInstalmentAmount": "string",
"minInstalmentCurrency": "string",
"maxRedraw": "string",
"maxRedrawCurrency": "string",
"minRedraw": "string",
"minRedrawCurrency": "string",
"offsetAccountEnabled": true,
"offsetAccountIds": [
"string"
],
"repaymentFrequency": "string",
"repaymentType": "INTEREST_ONLY"
},
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"address": {
"addressUType": "simple",
"simple": {
"mailingName": "string",
"addressLine1": "string",
"addressLine2": "string",
"addressLine3": "string",
"postcode": "string",
"city": "string",
"state": "string",
"country": "string"
},
"paf": {
"dpid": "string",
"thoroughfareNumber1": 0,
"thoroughfareNumber1Suffix": "string",
"thoroughfareNumber2": 0,
"thoroughfareNumber2Suffix": "string",
"flatUnitNumber": "string",
"floorLevelNumber": "string",
"lotNumber": 0,
"buildingName1": "string",
"buildingName2": "string",
"streetName": "string",
"streetType": "string",
"streetSuffix": "string",
"postalDeliveryType": "string",
"postalDeliveryNumber": 0,
"postalDeliveryNumberPrefix": "string",
"postalDeliveryNumberSuffix": "string",
"localityName": "string",
"postcode": "string",
"state": "string"
}
}
},
"links": {
"self": "string"
},
"meta": {}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | AccountDetail | true | none | none |
| links | Links | true | none | none |
| meta | Meta | true | none | none |
AccountDetail
{
"accountId": "string",
"displayName": "string",
"nickname": "string",
"maskedNumber": "string",
"openStatus": "OPEN",
"isOwned": "true",
"productCategory": "PERS_AT_CALL_DEPOSITS",
"productName": "string",
"bsb": "string",
"accountNumber": "string",
"bundleName": "string",
"specificAccountUType": "termDeposit",
"termDeposit": {
"lodgementDate": "string",
"maturityDate": "string",
"maturityAmount": "string",
"maturityCurrency": "string",
"maturityInstructions": "ROLLED_OVER"
},
"creditCard": {
"minPaymentAmount": "string",
"paymentDueAmount": "string",
"paymentCurrency": "string",
"paymentDueDate": "string"
},
"loan": {
"originalStartDate": "string",
"originalLoanAmount": "string",
"originalLoanCurrency": "string",
"loanEndDate": "string",
"nextInstalmentDate": "string",
"minInstalmentAmount": "string",
"minInstalmentCurrency": "string",
"maxRedraw": "string",
"maxRedrawCurrency": "string",
"minRedraw": "string",
"minRedrawCurrency": "string",
"offsetAccountEnabled": true,
"offsetAccountIds": [
"string"
],
"repaymentFrequency": "string",
"repaymentType": "INTEREST_ONLY"
},
"features": [
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
],
"fees": [
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
],
"depositRates": [
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"lendingRates": [
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
],
"address": {
"addressUType": "simple",
"simple": {
"mailingName": "string",
"addressLine1": "string",
"addressLine2": "string",
"addressLine3": "string",
"postcode": "string",
"city": "string",
"state": "string",
"country": "string"
},
"paf": {
"dpid": "string",
"thoroughfareNumber1": 0,
"thoroughfareNumber1Suffix": "string",
"thoroughfareNumber2": 0,
"thoroughfareNumber2Suffix": "string",
"flatUnitNumber": "string",
"floorLevelNumber": "string",
"lotNumber": 0,
"buildingName1": "string",
"buildingName2": "string",
"streetName": "string",
"streetType": "string",
"streetSuffix": "string",
"postalDeliveryType": "string",
"postalDeliveryNumber": 0,
"postalDeliveryNumberPrefix": "string",
"postalDeliveryNumberSuffix": "string",
"localityName": "string",
"postcode": "string",
"state": "string"
}
}
}
Properties
allOf
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| anonymous | Account | false | none | none |
and
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| anonymous | object | false | none | none |
| » bsb | string | false | none | The unmasked BSB for the account. Is expected to be formatted as digits only with leading zeros included and no punctuation or spaces |
| » accountNumber | string | false | none | The unmasked account number for the account. Should not be supplied if the account number is a PAN requiring PCI compliance. Is expected to be formatted as digits only with leading zeros included and no punctuation or spaces |
| » bundleName | string | false | none | Optional field to indicate if this account is part of a bundle that is providing additional benefit for to the customer |
| » specificAccountUType | string | false | none | The type of structure to present account specific fields. |
| » termDeposit | TermDepositAccount | false | none | none |
| » creditCard | CreditCardAccount | false | none | none |
| » loan | LoanAccount | false | none | none |
| » features | [AccountFeatures] | false | none | none |
| » fees | [AccountFees] | false | none | none |
| » depositRates | [AccountDepositRates] | false | none | none |
| » lendingRates | [AccountLendingRates] | false | none | none |
| » address | PhysicalAddress | false | none | none |
Enumerated Values
| Property | Value |
|---|---|
| specificAccountUType | termDeposit |
| specificAccountUType | creditCard |
| specificAccountUType | loan |
TermDepositAccount
{
"lodgementDate": "string",
"maturityDate": "string",
"maturityAmount": "string",
"maturityCurrency": "string",
"maturityInstructions": "ROLLED_OVER"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| lodgementDate | string(DateString) | true | none | The lodgement date of the original deposit |
| maturityDate | string(DateString) | true | none | Maturity date for the term deposit |
| maturityAmount | string(AmountString) | false | none | Amount to be paid upon maturity. If absent it implies the amount to paid is variable and cannot currently be calculated |
| maturityCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| maturityInstructions | string | true | none | Current instructions on action to be taken at maturity |
Enumerated Values
| Property | Value |
|---|---|
| maturityInstructions | ROLLED_OVER |
| maturityInstructions | PAID_OUT_AT_MATURITY |
CreditCardAccount
{
"minPaymentAmount": "string",
"paymentDueAmount": "string",
"paymentCurrency": "string",
"paymentDueDate": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| minPaymentAmount | string(AmountString) | true | none | The minimum payment amount due for the next card payment |
| paymentDueAmount | string(AmountString) | true | none | The amount due for the next card payment |
| paymentCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| paymentDueDate | string(DateString) | true | none | Date that the next payment for the card is due |
LoanAccount
{
"originalStartDate": "string",
"originalLoanAmount": "string",
"originalLoanCurrency": "string",
"loanEndDate": "string",
"nextInstalmentDate": "string",
"minInstalmentAmount": "string",
"minInstalmentCurrency": "string",
"maxRedraw": "string",
"maxRedrawCurrency": "string",
"minRedraw": "string",
"minRedrawCurrency": "string",
"offsetAccountEnabled": true,
"offsetAccountIds": [
"string"
],
"repaymentFrequency": "string",
"repaymentType": "INTEREST_ONLY"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| originalStartDate | string(DateString) | false | none | Optional original start date for the loan |
| originalLoanAmount | string(AmountString) | false | none | Optional original loan value |
| originalLoanCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| loanEndDate | string(DateString) | false | none | Date that the loan is due to be repaid in full |
| nextInstalmentDate | string(DateString) | false | none | Next date that an instalment is required |
| minInstalmentAmount | string(AmountString) | false | none | Minimum amount of next instalment |
| minInstalmentCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| maxRedraw | string(AmountString) | false | none | Maximum amount of funds that can be redrawn. If not present redraw is not available even if the feature exists for the account |
| maxRedrawCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| minRedraw | string(AmountString) | false | none | Minimum redraw amount |
| minRedrawCurrency | string(CurrencyString) | false | none | If absent assumes AUD |
| offsetAccountEnabled | boolean | false | none | Set to true if one or more offset accounts are configured for this loan account |
| offsetAccountIds | [string] | false | none | The accountIDs of the configured offset accounts attached to this loan. Only offset accounts that can be accesses under the current authorisation should be included. It is expected behaviour that offsetAccountEnabled is set to true but the offsetAccountIds field is absent or empty. This represents a situation where an offset account exists but details can not be accessed under the current authorisation |
| repaymentFrequency | string | false | none | The expected or required repayment frequency. Formatted according to ISO 8601 Durations |
| repaymentType | string | false | none | Options in place for repayments. If absent defaults to PRINCIPAL_AND_INTEREST |
Enumerated Values
| Property | Value |
|---|---|
| repaymentType | INTEREST_ONLY |
| repaymentType | PRINCIPAL_AND_INTEREST |
AccountFeatures
{
"featureType": "CARD_ACCESS",
"additionalValue": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| featureType | string | true | none | The type of feature described |
| additionalValue | string | false | none | Generic field containing additional information relevant to the featureType specified. Whether mandatory or not is dependent on the value of featureType |
Enumerated Values
| Property | Value |
|---|---|
| featureType | CARD_ACCESS |
| featureType | ADDITIONAL_CARDS |
| featureType | UNLIMITED_TXNS |
| featureType | FREE_TXNS |
| featureType | FREE_TXNS_ALLOWANCE |
| featureType | LOYALTY_PROGRAM |
| featureType | OFFSET |
| featureType | OVERDRAFT |
| featureType | REDRAW |
| featureType | INSURANCE |
| featureType | BALANCE_TRANSFERS |
| featureType | INTEREST_FREE |
| featureType | INTEREST_FREE_TRANSFERS |
| featureType | DIGITAL_WALLET |
| featureType | DIGITAL_BANKING |
| featureType | NPP_PAYID |
| featureType | NPP_ENABLED |
| featureType | DONATE_INTEREST |
| featureType | BILL_PAYMENT |
AccountFees
{
"name": "string",
"feeType": "PERIODIC",
"amount": "string",
"balanceRate": "string",
"transactionRate": "string",
"currency": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string",
"discounts": [
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| name | string | true | none | Name of the fee |
| feeType | string | true | none | The type of fee |
| amount | string(AmountString) | false | none | The amount charged for the fee. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| balanceRate | string(RateString) | false | none | A fee rate calculated based on a proportion of the balance. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| transactionRate | string(RateString) | false | none | A fee rate calculated based on a proportion of a transaction. Assumed to be in AUD. One of amount, balanceRate and transactionRate is mandatory |
| currency | string(CurrencyString) | false | none | The currency the fee will be charged in. Assumes AUD if absent |
| additionalValue | string | false | none | Generic field containing additional information relevant to the feeType specified. Whether mandatory or not is dependent on the value of feeType |
| additionalInfo | string | false | none | Display text providing more information on the fee |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
| discounts | [AccountDiscounts] | false | none | none |
Enumerated Values
| Property | Value |
|---|---|
| feeType | PERIODIC |
| feeType | TRANSACTION |
| feeType | EXIT |
| feeType | OVERDRAW |
| feeType | MIN_BALANCE |
| feeType | REDRAW |
| feeType | CHEQUE_CASH |
| feeType | CHEQUE_STOP |
| feeType | CHEQUE_BOOK |
| feeType | CARD_REPLACE |
| feeType | PAPER_STATEMENT |
| feeType | OTHER_EVENT |
AccountDiscounts
{
"description": "string",
"discountType": "BALANCE",
"amount": "string",
"additionalValue": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| description | string | true | none | Description of the discount |
| discountType | string | true | none | The type of discount. See the next section for an overview of valid values and their meaning |
| amount | string(AmountString) | true | none | Value of the discount. Note that the currency of the fee discount is expected to be the same as the currency of the fee itself |
| additionalValue | string | false | none | Generic field containing additional information relevant to the discountType specified. Whether mandatory or not is dependent on the value of discountType |
Enumerated Values
| Property | Value |
|---|---|
| discountType | BALANCE |
| discountType | DEPOSITS |
| discountType | PAYMENTS |
| discountType | BUNDLE |
AccountDepositRates
{
"depositRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| depositRateType | string | true | none | The type of rate (base, bonus, etc). See the next section for an overview of valid values and their meaning |
| rate | string(RateString) | true | none | The rate to be applied |
| additionalValue | string | false | none | Generic field containing additional information relevant to the depositRateType specified. Whether mandatory or not is dependent on the value of depositRateType |
| additionalInfo | string | false | none | Display text providing more information on the fee |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
Enumerated Values
| Property | Value |
|---|---|
| depositRateType | FIXED |
| depositRateType | BONUS |
| depositRateType | BUNDLE_BONUS |
| depositRateType | VARIABLE |
| depositRateType | INTRODUCTORY |
AccountLendingRates
{
"lendingRateType": "FIXED",
"rate": "string",
"additionalValue": "string",
"additionalInfo": "string",
"additionalInfoUri": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| lendingRateType | string | true | none | The type of rate (fixed, variable, etc). See the next section for an overview of valid values and their meaning |
| rate | string(RateString) | true | none | The rate to be applied |
| additionalValue | string | false | none | Information relevant to the lendingRateType specified. Whether mandatory or not is dependent on the Generic field containing additional information relevant to the lendingRateType specified. Whether mandatory or not is dependent on the value of lendingRateType |
| additionalInfo | string | false | none | Display text providing more information on the fee. |
| additionalInfoUri | string(URIString) | false | none | Link to a web page with more information on this fee |
Enumerated Values
| Property | Value |
|---|---|
| lendingRateType | FIXED |
| lendingRateType | INTRODUCTORY |
| lendingRateType | DISCOUNT |
| lendingRateType | PENALTY |
| lendingRateType | BUNDLE_DISCOUNT |
| lendingRateType | FLOATING |
| lendingRateType | MARKET_LINKED |
| lendingRateType | CASH_ADVANCE |
| lendingRateType | VARIABLE |
| lendingRateType | COMPARISON |
ResponseBankingTransactions
{
"data": {
"accountId": "string",
"displayName": "string",
"nickname": "string",
"transactions": [
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string"
}
]
},
"links": {
"self": "string",
"first": "string",
"prev": "string",
"next": "string",
"last": "string"
},
"meta": {
"totalRecords": 0,
"totalPages": 0
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | object | true | none | none |
| » accountId | string(ASCIIString) | false | none | ID of the account for which transactions are provided |
| » displayName | string | false | none | The display name of the account as defined by the bank. This should not incorporate account numbers or PANs. If it does the values should be masked according to the rules of the MaskedAccountString common type. |
| » nickname | string | false | none | A customer supplied nick name for the account |
| » transactions | [Transaction] | true | none | none |
| links | LinksPaginated | true | none | none |
| meta | MetaPaginated | true | none | none |
Transaction
{
"accountId": "string",
"transactionId": "string",
"isDetailAvailable": true,
"type": "FEE",
"status": "PENDING",
"description": "string",
"postingDateTime": "string",
"valueDateTime": "string",
"executionDateTime": "string",
"amount": "string",
"currency": "string",
"reference": "string",
"merchantName": "string",
"merchantCategoryCode": "string",
"billerCode": "string",
"billerName": "string",
"crn": "string",
"apcaNumber": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| accountId | string(ASCIIString) | true | none | A unique ID of the account adhering to the standards for ID permanence |
| transactionId | string(ASCIIString) | false | none | A unique ID of the transaction adhering to the standards for ID permanence. This is mandatory (through hashing if necessary) unless there are specific and justifiable technical reasons why a transaction cannot be uniquely identified for a particular account type |
| isDetailAvailable | boolean | true | none | True if extended information is available using the transaction detail end point. False if extended data is not available |
| type | string | true | none | The type of the transaction |
| status | string | true | none | Status of the transaction whether pending or posted. Note that there is currently no provision in the standards to gaurantee the ability to correlate a pending transaction with an associated posted transaction |
| description | string | true | none | The transaction description as applied by the financial institution |