Westpac Banking Corporation Banking Products API
Banking Product endpoints
Banking Product endpoints
openapi: 3.0.3
info:
contact:
email: contact@dsb.gov.au
name: Data Standards Body
url: https://dsb.gov.au/
description: Specifications for resource endpoints applicable to data holders in the Banking sector.
license:
name: MIT License
url: https://opensource.org/licenses/MIT
title: CDR Banking Banking Account Balances Banking Products API
version: 1.36.0
servers:
- description: Westpac Banking Corporation (Westpac) — confirmed live CDR data-holder host
url: https://digital-api.westpac.com.au/cds-au/v1
- description: MTLS
url: https://mtls.dh.example.com/cds-au/v1
tags:
- description: Banking Product endpoints
name: Banking Products
x-shortName: Products
paths:
/banking/products:
get:
description: 'Obtain a list of products that are currently openly offered to the market.
Note that the results returned by this endpoint are expected to be ordered in descending order according to _lastUpdated_.
### Conventions
In the product reference payloads there are a number of recurring conventions that are explained below.
#### 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 named [_additionalValue_](#productfeaturetypedoc). 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.
- Depending on the type of data being represented there may be additional specific fields.
#### 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 holder to describe the product more fully using a web page hosted on their online 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 different 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, while _productCategory_ is a common field between accounts and products, there is no specific ID that can be used to link an account to a product within the regime.
Similarly, many of the fields and objects in the product payload will appear in the account detail payload but the structures and semantics are not identical as one refers to a product that can potentially be originated and one refers to an account that actually has been instantiated and created along with the associated decisions inherent in that process.
#### 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 using the _updated-since_ query parameter.
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 longer offered can be marked not effective for a few weeks before they are then removed from the product set as an option entirely.
Obsolete versions: [v1](includes/obsolete/get-products-v1.html), [v2](includes/obsolete/get-products-v2.html), [v3](includes/obsolete/get-products-v3.html), [v4](includes/obsolete/get-products-v4.html).'
operationId: listBankingProducts
parameters:
- description: 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. Valid values are `CURRENT`, `FUTURE` and `ALL`. If absent defaults to `CURRENT`.
explode: true
in: query
name: effective
required: false
schema:
default: CURRENT
enum:
- ALL
- CURRENT
- FUTURE
type: string
style: form
- description: Only include products that have been updated after the specified date and time. If absent defaults to include all products.
explode: true
in: query
name: updated-since
required: false
schema:
type: string
style: form
x-cds-type: DateTimeString
- description: Filter results based on a specific brand.
explode: true
in: query
name: brand
required: false
schema:
type: string
style: form
- description: 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.
explode: true
in: query
name: product-category
required: false
schema:
$ref: '#/components/schemas/BankingProductCategoryV2'
style: form
- description: Page of results to request (standard pagination).
explode: true
in: query
name: page
required: false
schema:
default: 1
type: integer
style: form
x-cds-type: PositiveInteger
- description: Page size to request. Default is 25 (standard pagination).
explode: true
in: query
name: page-size
required: false
schema:
default: 25
type: integer
style: form
x-cds-type: PositiveInteger
- description: Version of the API endpoint requested by the client. Must be set to a positive integer. The endpoint should respond with the highest supported version between [_x-min-v_](#request-headers) and [_x-v_](#request-headers). If the value of [_x-min-v_](#request-headers) is equal to or higher than the value of [_x-v_](#request-headers) then the [_x-min-v_](#request-headers) header should be treated as absent. If all versions requested are not supported then the endpoint **MUST** respond with a `406 Not Acceptable`. See [HTTP Headers](#request-headers).
explode: false
in: header
name: x-v
required: true
schema:
type: string
style: simple
- description: Minimum version of the API endpoint requested by the client. Must be set to a positive integer if provided. The endpoint should respond with the highest supported version between [_x-min-v_](#request-headers) and [_x-v_](#request-headers). If all versions requested are not supported then the endpoint **MUST** respond with a `406 Not Acceptable`.
explode: false
in: header
name: x-min-v
required: false
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseBankingProductListV4'
description: Successful response
headers:
x-v:
$ref: '#/components/headers/XV'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[400 - Invalid Field](#error-400-field-invalid)</li><li>[400 - Missing Required Field](#error-400-field-missing)</li><li>[400 - Missing Required Header](#error-400-header-missing)</li><li>[400 - Invalid Version](#error-400-header-invalid-version)</li><li>[400 - Invalid Date](#error-400-field-invalid-date-time)</li><li>[400 - Invalid Page Size](#error-400-field-invalid-page-size)</li></ul>
'406':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[406 - Unsupported Version](#error-406-header-unsupported-version)</li></ul>
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[422 - Invalid Page](#error-422-field-invalid-page)</li></ul>
servers:
- description: TLS
url: https://tls.dh.example.com/cds-au/v1
summary: Get Products
tags:
- Banking Products
x-version: '5'
/banking/products/{productId}:
get:
description: 'Obtain detailed information on a single product offered openly to the market.
Obsolete versions: [v1](includes/obsolete/get-product-detail-v1.html), [v2](includes/obsolete/get-product-detail-v2.html), [v3](includes/obsolete/get-product-detail-v3.html), [v4](includes/obsolete/get-product-detail-v4.html), [v5](includes/obsolete/get-product-detail-v5.html), [v6](includes/obsolete/get-product-detail-v6.html).'
operationId: getBankingProductDetail
parameters:
- description: The _productId_ to obtain data for. _productId_ values are returned by product list endpoints.
explode: false
in: path
name: productId
required: true
schema:
$ref: '#/components/schemas/BankingProductId'
style: simple
x-cds-type: ASCIIString
- description: Version of the API endpoint requested by the client. Must be set to a positive integer. The endpoint should respond with the highest supported version between [_x-min-v_](#request-headers) and [_x-v_](#request-headers). If the value of [_x-min-v_](#request-headers) is equal to or higher than the value of [_x-v_](#request-headers) then the [_x-min-v_](#request-headers) header should be treated as absent. If all versions requested are not supported then the endpoint **MUST** respond with a `406 Not Acceptable`. See [HTTP Headers](#request-headers).
explode: false
in: header
name: x-v
required: true
schema:
type: string
style: simple
- description: Minimum version of the API endpoint requested by the client. Must be set to a positive integer if provided. The endpoint should respond with the highest supported version between [_x-min-v_](#request-headers) and [_x-v_](#request-headers). If all versions requested are not supported then the endpoint **MUST** respond with a `406 Not Acceptable`.
explode: false
in: header
name: x-min-v
required: false
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseBankingProductByIdV7'
description: Successful response
headers:
x-v:
$ref: '#/components/headers/XV'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[400 - Invalid Field](#error-400-field-invalid)</li><li>[400 - Missing Required Field](#error-400-field-missing)</li><li>[400 - Missing Required Header](#error-400-header-missing)</li><li>[400 - Invalid Version](#error-400-header-invalid-version)</li></ul>
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[404 - Unavailable Resource](#error-404-resource-unavailable)</li><li>[404 - Invalid Resource](#error-404-resource-invalid)</li></ul>
'406':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseErrorListV2'
description: The following error codes **MUST** be supported:<br/><ul class="error-code-list"><li>[406 - Unsupported Version](#error-406-header-unsupported-version)</li></ul>
servers:
- description: TLS
url: https://tls.dh.example.com/cds-au/v1
summary: Get Product Detail
tags:
- Banking Products
x-version: '7'
components:
schemas:
BankingProductInstalments:
description: Details of instalment features on the account.
properties:
maximumConcurrentPlans:
description: Maximum number of concurrent active instalment plans that may be created on the account. If `null`, there is no predetermined maximum number.
type: integer
x-cds-type: NaturalNumber
instalmentsLimit:
description: Maximum combined limit of all instalment plans that may be created on the account. If `null` or not present, an opened account balance _creditLimit_ may be assumed to provide a maximum limit for instalments.
type: string
x-cds-type: AmountString
minimumPlanValue:
description: Minimum value that can be opened as an instalment plan.
type: string
x-cds-type: AmountString
maximumPlanValue:
description: Maximum value that can be opened as an instalment plan. If `null` or not present, _instalmentsLimit_ is assumed to be the maximum individual plan value.
type: string
x-cds-type: AmountString
minimumSplit:
description: Minimum number of instalment payments a plan can be created with.
example: 4
type: integer
x-cds-type: PositiveInteger
maximumSplit:
description: Maximum number of instalment payments a plan can be created with.
example: 4
type: integer
x-cds-type: PositiveInteger
required:
- maximumSplit
- minimumSplit
type: object
BankingProductRateConditionV2:
description: Defines a condition for the applicability of a rate.
properties:
rateApplicabilityType:
description: Category of applicability condition associated with the rate. For more information refer to [Rate and Tier Applicability Types](#tocSbankingproductrateconditiondoc).
enum:
- MIN_DEPOSITS
- MIN_DEPOSIT_AMOUNT
- DEPOSIT_BALANCE_INCREASED
- EXISTING_CUST
- NEW_ACCOUNTS
- NEW_CUSTOMER
- NEW_CUSTOMER_TO_GROUP
- ONLINE_ONLY
- OTHER
- MIN_PURCHASES
- MAX_WITHDRAWALS
- MAX_WITHDRAWAL_AMOUNT
example: NEW_CUSTOMER
type: string
additionalValue:
description: Generic field containing additional information relevant to the _rateApplicabilityType_ specified. Whether mandatory or not is dependent on the value of [_rateApplicabilityType_](#tocSbankingproductrateconditiondoc).
type: string
additionalInfo:
description: Display text providing more information on the condition. Mandatory if the [_rateApplicabilityType_](#tocSbankingproductrateconditiondoc) value is `OTHER`.
type: string
additionalInfoUri:
description: Link to a web page with more information on this condition.
type: string
x-cds-type: URIString
required:
- rateApplicabilityType
type: object
x-conditional:
- additionalValue
- additionalInfo
BankingFeeRange:
description: A minimum or maximum fee amount where a specific fixed amount is not known until the fee is incurred.
properties:
feeMinimum:
description: The minimum fee that will be charged per occurrence.
type: string
x-cds-type: AmountString
feeMaximum:
description: The maximum fee that will be charged per occurrence.
type: string
x-cds-type: AmountString
type: object
BankingProductConstraintV3:
properties:
constraintType:
description: The type of constraint described. For further details, refer to [Product Constraint Types](#tocSproductconstrainttypedoc).
enum:
- MAX_BALANCE
- MAX_LIMIT
- MAX_LVR
- MIN_BALANCE
- MIN_LIMIT
- MIN_LVR
- OPENING_BALANCE
- OTHER
type: string
additionalValue:
description: Generic field containing additional information relevant to the [_constraintType_](#tocSproductconstrainttypedoc) specified. Whether mandatory or not is dependent on the value of [_constraintType_](#tocSproductconstrainttypedoc).
type: string
additionalInfo:
description: Display text providing more information on the constraint. Mandatory if the [_constraintType_](#tocSproductconstrainttypedoc) value is `OTHER`.
type: string
additionalInfoUri:
description: Link to a web page with more information on the constraint.
type: string
x-cds-type: URIString
required:
- constraintType
type: object
x-conditional:
- additionalValue
- additionalInfo
ErrorV2_meta:
description: Additional data for customised error codes.
properties:
urn:
description: The CDR error code URN which the application-specific error code extends. Mandatory if the error _code_ is an application-specific error rather than a standardised error code.
type: string
type: object
x-conditional:
- urn
MetaPaginated:
example:
totalRecords: 0
totalPages: 6
properties:
totalRecords:
description: The total number of records in the full set. See [pagination](#pagination).
type: integer
x-cds-type: NaturalNumber
totalPages:
description: The total number of pages in the full set. See [pagination](#pagination).
type: integer
x-cds-type: NaturalNumber
required:
- totalPages
- totalRecords
type: object
BankingProductFeeV2:
properties:
name:
description: Name of the fee.
type: string
feeType:
description: The type of fee. For further details, refer to [Product Fee Types](#tocSproductfeetypedoc).
enum:
- CASH_ADVANCE
- DEPOSIT
- DISHONOUR
- ENQUIRY
- EVENT
- EXIT
- LATE_PAYMENT
- OTHER
- PAYMENT
- PERIODIC
- PURCHASE
- REPLACEMENT
- TRANSACTION
- UPFRONT
- UPFRONT_PER_PLAN
- VARIATION
- WITHDRAWAL
example: CASH_ADVANCE
type: string
feeMethodUType:
description: Reference to the applicable fee charging method structure.
enum:
- fixedAmount
- rateBased
- variable
type: string
fixedAmount:
allOf:
- $ref: '#/components/schemas/BankingFeeAmount'
description: Mandatory if the _feeMethodUType_ value is `fixedAmount`. Where the fee is a specific amount.
rateBased:
allOf:
- $ref: '#/components/schemas/BankingFeeRate'
description: Mandatory if the _feeMethodUType_ value is `rateBased`. Where the fee is based on a type of rate.
variable:
allOf:
- $ref: '#/components/schemas/BankingFeeRange'
description: Mandatory if the _feeMethodUType_ value is `variable`. Where the amount or rate may not be known until the fee is incurred.
feeCap:
description: The cap amount if multiple occurrences of the fee are capped to a limit.
type: string
x-cds-type: AmountString
feeCapPeriod:
description: Specifies a duration over which multiple occurrences of the fee will be capped. Formatted according to [ISO 8601 Durations](https://en.wikipedia.org/wiki/ISO_8601#Durations) (excludes recurrence syntax).
type: string
x-cds-type: ExternalRef
currency:
default: AUD
description: The currency the fee will be charged in. Assumes `AUD` if absent.
type: string
x-cds-type: CurrencyString
additionalValue:
description: Generic field containing additional information relevant to the [_feeType_](#tocSproductfeetypedoc) specified. Whether mandatory or not is dependent on the value of [_feeType_](#tocSproductfeetypedoc).
type: string
additionalInfo:
description: Display text providing more information on the fee. Mandatory if the [_feeType_](#tocSproductfeetypedoc) value is `OTHER`.
type: string
additionalInfoUri:
description: Link to a web page with more information on this fee.
type: string
x-cds-type: URIString
discounts:
description: An optional list of discounts to this fee that may be available.
items:
$ref: '#/components/schemas/BankingProductDiscountV2'
type: array
required:
- feeMethodUType
- feeType
- name
type: object
x-conditional:
- fixedAmount
- rateBased
- variable
- additionalValue
- additionalInfo
BankingProductRateTierV4:
description: Defines the criteria and conditions for which a rate applies.
properties:
name:
description: A display name for the tier.
type: string
unitOfMeasure:
description: The unit of measure that applies to the _minimumValue_ and _maximumValue_ values, e.g.,<ul><li>`DOLLAR` for a dollar amount (with values in AmountString format)<li>`PERCENT` for Loan-to-Value Ratio or LVR (with values in RateString format)<li>`MONTH` or `DAY` for a period representing a discrete number of months or days for a fixed-term deposit or loan (with values as a string containing a positive integer).</ul>
enum:
- DAY
- DOLLAR
- MONTH
- PERCENT
type: string
minimumValue:
description: The number of _unitOfMeasure_ units that form the lower bound of the tier. The tier should be inclusive of this value.
type: string
maximumValue:
description: 'The number of _unitOfMeasure_ units that form the upper bound of the tier or band. For a tier with a discrete value (as opposed to a range of values e.g., 1 month) this must be the same as _minimumValue_. Where this is the same as the _minimumValue_ value of the next-higher tier the referenced tier should be exclusive of this value. For example a term deposit of 2 months falls into the upper tier of the following tiers: (1 – 2 months, 2 – 3 months). If absent the tier''s range has no upper bound.'
type: string
rateApplicationMethod:
description: The method used to calculate the amount to be applied using one or more tiers. A single rate may be applied to the entire balance or each applicable tier rate is applied to the portion of the balance that falls into that tier (referred to as 'bands' or 'steps').
enum:
- PER_TIER
- WHOLE_BALANCE
type: string
applicabilityConditions:
description: Applicability conditions for the rate tier.
items:
$ref: '#/components/schemas/BankingProductRateConditionV2'
type: array
additionalInfo:
description: Display text providing more information on the rate tier.
type: string
additionalInfoUri:
description: Link to a web page with more information on this rate tier.
type: string
x-cds-type: URIString
required:
- minimumValue
- name
- unitOfMeasure
type: object
BankingProductBundle:
properties:
name:
description: Name of the bundle.
type: string
description:
description: Description of the bundle.
type: string
additionalInfo:
description: Display text providing more information on the bundle.
type: string
additionalInfoUri:
description: Link to a web page with more information on the bundle criteria and benefits.
type: string
x-cds-type: URIString
productIds:
description: Array of _productID_ values for products included in the bundle that are available via the product endpoints. Note that this array is not intended to represent a comprehensive model of the products included in the bundle and some products available for the bundle may not be available via the product reference endpoints.
items:
$ref: '#/components/schemas/BankingProductId'
type: array
required:
- description
- name
type: object
Links:
example:
self: self
properties:
self:
description: Fully qualified link that generated the current response document.
type: string
x-cds-type: URIString
required:
- self
type: object
BankingProductFeatureV4:
properties:
featureType:
description: The type of feature described. For further details, refer to [Product Feature Types](#tocSproductfeaturetypedoc).
enum:
- ADDITIONAL_CARDS
- BALANCE_TRANSFERS
- BILL_PAYMENT
- BONUS_REWARDS
- CARD_ACCESS
- CASHBACK_OFFER
- COMPLEMENTARY_PRODUCT_DISCOUNTS
- EXTRA_DOWN_PAYMENT
- DIGITAL_BANKING
- DIGITAL_WALLET
- DONATE_INTEREST
- EXTRA_REPAYMENTS
- FRAUD_PROTECTION
- FREE_TXNS
- FREE_TXNS_ALLOWANCE
- FUNDS_AVAILABLE_AFTER
- GUARANTOR
- INSTALMENT_PLAN
- INSURANCE
- INTEREST_FREE
- INTEREST_FREE_TRANSFERS
- LOYALTY_PROGRAM
- NOTIFICATIONS
- NPP_ENABLED
- NPP_PAYID
- OFFSET
- OTHER
- OVERDRAFT
- REDRAW
- RELATIONSHIP_MANAGEMENT
- UNLIMITED_TXNS
type: string
additionalValue:
description: Generic field containing additional information relevant to the [_featureType_](#tocSproductfeaturetypedoc) specified. Whether mandatory or not is dependent on the value of the [_featureType_](#tocSproductfeaturetypedoc).
type: string
additionalInfo:
description: Display text providing more information on the feature. Mandatory if the [_featureType_](#tocSproductfeaturetypedoc) value is `OTHER`.
type: string
additionalInfoUri:
description: Link to a web page with more information on this feature.
type: string
x-cds-type: URIString
required:
- featureType
type: object
x-conditional:
- additionalValue
- additionalInfo
BankingProductV6:
example:
brandGroup: brandGroup
additionalInformation:
eligibilityUri: eligibilityUri
additionalFeesAndPricingUris:
- additionalInfoUri: additionalInfoUri
description: description
- additionalInfoUri: additionalInfoUri
description: description
additionalTermsUris:
- additionalInfoUri: additionalInfoUri
description: description
- additionalInfoUri: additionalInfoUri
description: description
bundleUri: bundleUri
feesAndPricingUri: feesAndPricingUri
additionalBundleUris:
- additionalInfoUri: additionalInfoUri
description: description
- additionalInfoUri: additionalInfoUri
description: description
additionalEligibilityUris:
- additionalInfoUri: additionalInfoUri
description: description
- additionalInfoUri: additionalInfoUri
description: description
additionalOverviewUris:
- additionalInfoUri: additionalInfoUri
description: description
- additionalInfoUri: additionalInfoUri
description: description
termsUri: termsUri
overviewUri: overviewUri
brandName: brandName
productId: productId
description: description
effectiveTo: effectiveTo
cardArt:
- imageUri: imageUri
cardScheme: AMEX
cardType: CHARGE
title: title
- imageUri: imageUri
cardScheme: AMEX
cardType: CHARGE
title: title
lastUpdated: lastUpdated
isTailored: true
name: name
applicationUri: applicationUri
effectiveFrom: effectiveFrom
brand: brand
properties:
productId:
description: A data holder-specific unique identifier for a Banking product. This identifier must be unique to a product but does not otherwise need to adhere to ID permanence guidelines.
type: string
x-cds-type: ASCIIString
effectiveFrom:
description: The date and time from which this product is effective (i.e. is available for origination). Used to enable the articulation of products to the regime before they are available for customers to originate.
type: string
x-cds-type: DateTimeString
effectiveTo:
description: 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.
type: string
x-cds-type: DateTimeString
lastUpdated:
description: 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).
type: string
x-cds-type: DateTimeString
productCategory:
$ref: '#/components/schemas/BankingProductCategoryV2'
name:
description: The display name of the product.
type: string
description:
description: A description of the product.
type: string
brand:
description: A label of the brand for the product. Able to be used for filtering. For data holders with single brands this value is still required.
type: string
brandName:
# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/westpac/refs/heads/main/openapi/westpac-banking-products-api-openapi.yml