CINXE.COM
Tips, Tricks and Best Practices - SISS Data Services Direct Data Developer Portal
<!DOCTYPE html><html lang="en"><head><link rel="shortcut icon" href="/content/32x32.svg"><meta charset="utf-8"><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"><link href="/styles/theme.css" rel="stylesheet" type="text/css"><script src="/scripts/theme.js" type="text/javascript"></script><title>Tips, Tricks and Best Practices - SISS Data Services Direct Data Developer Portal</title><meta name="description" content="Here you will find information on the tips, tricks and best practices when working with the SISS REST APIs"><meta name="keywords" content="tips, tricks"><meta name="author" content="SISS Data Services"><link href="/styles/styles.css" rel="stylesheet" type="text/css"><meta property="og:type" content="article"><meta property="og:site_name" content="SISS Data Services Direct Data Developer Portal"><meta property="og:title" content="Tips, Tricks and Best Practices"><meta property="og:description" content="Here you will find information on the tips, tricks and best practices when working with the SISS REST APIs"><meta property="og:url" content="/tips-tricks-and-best-practices"><link href="/tips-tricks-and-best-practices/styles.css" rel="stylesheet" type="text/css"></head><body class="block"><div class="flex flex-column flex-grow fill"><div class="popup-host"></div><section class="bcgkrvidmt-sm bcgkrvidmt-md bcgkrvidmt-lg bcgkrvidmt-xl bcgkrvidmt" access-id="f162b697-ae6a-67f1-dc3a-0114a573b0e2"><div class="gjpnqnxbbj gjpnqnxbbj-sm gjpnqnxbbj-md gjpnqnxbbj-lg gjpnqnxbbj-xl"><div class="kltazpmqso kltazpmqso-sm kltazpmqso-xl kltazpmqso-md" role="article"><a href="/"><img class="content picture picture-nhebn" src="/content/ACSISS-color-logo.svg" alt="Picture" width="300" style="width:300px;height:98px" height="98"></a><div class="collapsible collapsible-panel legacy"><div class="collapsible-backdrop"></div><div class="collapsible-content rqgdafxoox-md rqgdafxoox-lg rqgdafxoox"><nav access-id="18cc658d-76e6-64cc-3700-a708874d6170" class="menu menu-wlu0u inline-block"><div class="menu menu-horizontal"><ul class="nav"><li class="nav-item"><a href="/" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Home</a></li><li class="nav-item"><a href="#" class="nav-link" data-toggle="dropdown" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">How to get going</a><div class="dropdown"><ul class="nav"><li class="nav-item"><a href="/getting-started" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Getting Started</a></li><li class="nav-item"><a href="/using-postman" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Using Postman</a></li><li class="nav-item"><a href="/try-it" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Using "Try-It"</a></li><li class="nav-item"><a href="/tips-tricks-and-best-practices" class="nav-link nav-link-active" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Tips, Tricks and Best Practices</a></li><li class="nav-item"><a href="/code-samples#qf7Y3" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }" target="_self">Code Samples</a></li></ul></div></li></ul></div></nav><nav access-id="98b5cc1a-8581-125e-a312-672e9789fac5" class="menu menu-wlu0u inline-block"><div class="menu menu-horizontal"><ul class="nav"><li class="nav-item"><a href="/signin" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Sign in</a></li><li class="nav-item"><a href="/signup" class="nav-link" data-bind="text: item.label, hyperlink: item.hyperlink, css: { 'nav-link-active': item.isActive }">Sign up</a></li></ul></div></nav><button class="collapsible-panel-close" aria-label="Toggle" data-dismiss="collapsible"><i class="icon-emb icon-emb-simple-remove"></i></button></div><button class="collapsible-panel-open" aria-label="Toggle" data-toggle="collapsible"><i class="icon-emb icon-emb-menu-8"></i></button></div></div></div></section><section class="sbhxcfkoob" access-id="883c59b1-c1fd-83d0-69ad-e72ef7c72ad1"><div class="pxvkdssivt"><div class="ujzuqugzvl" role="main"><div class="flex flex-column flex-grow fill block"><section class="lzyrdmjehm lzyrdmjehm-xl" access-id="17338e72-5723-19e9-1161-60aa703637d8"><div class="cmwjhkfdnp cmwjhkfdnp-sm cmwjhkfdnp-md cmwjhkfdnp-lg cmwjhkfdnp-xl"><div class="myaxhjsvdw myaxhjsvdw-md" role="article"><div class="ProseMirror"><h1 id="DsPh8">Tips, Tricks and Best Practices</h1><h2 id="zuCez">1. Be aware of paging</h2><p>Each end-point that returns multiple records in the SISS REST APIs use pagination to return results.</p><h3 id="Zl0p5">Query Parameters</h3><p>The pagination requirements are stipulated on a request using query parameters. For end-points that support paging the following query parameters MAY be provided:</p><ul><li><p><i>page </i>– the page number being requested (with the first page being 1)</p></li><li><p><i>page-size</i> – the number of records to return in each page</p></li></ul><p>If the query parameters are not provided the following defaults will be assumed:</p><ul><li><p><i>page</i> – a default of 1 (the first page) will be assumed</p></li><li><p><i>page-size</i> – a default of 25 will be assumed</p></li></ul><h3 id="PBe0s">Response Fields</h3><p>In addition to the data requested, the responses include following additional information:</p><ul><li><p>In the <b><code>links</code></b><code> </code>object, in addition to the <i>self </i>field the following fields are to provided:</p><ul><li><p><i>first </i>- A URI to request the first page. Only returned if this response is not the first page.</p></li><li><p><i>last </i>- A URI to request the last page. Only returned if this response is not the last page.</p></li><li><p><i>prev </i>- A URI to the previous page. Only returned if this response is not the first page.</p></li><li><p><i>next </i>- A URI to the next page. Only returned if this response is not the last page.</p></li></ul></li><li><p>In the <b><code>meta</code></b> object the following fields are to be provided:</p><ul><li><p><i>totalRecords </i>- The total number of records in the set.</p></li><li><p><i>currentpage </i>- The current page of the set.</p></li><li><p><i>totalPages </i>- The total number of pages in the set.</p></li></ul></li></ul><h3 id="W2dQV">Additional Info</h3><ul><li><p>A maximum page size of <code>500</code> records is set for all end points. If a page size greater than this maximum is requested then a HTTP status of <code>422 Unprocessable Entity</code> WILL be returned.</p></li></ul><h2 id="BG9mh">2. Cater for Rate Limiting (Throttling)</h2><p>Rate Limits are in place for all tiers (even the unlimited tier has an upper maximum TPS). You should control the number of calls you make to the SISS REST APIs to match the TPS and monthly limits of your subscribed products.</p><p>If you make more than your allowed calls within 1 second, or exceed your total calls for the month, you will receive a <code>429 Too Many Requests</code> response. This response includes a <i>retry-after</i> field, which states the number of seconds you need to wait.</p><p>You DO NOT need to request a new JWT token upon receiving this error, and making a call with a new token (assuming you could retrieve a new JWT token within the retry-after value) will return the same error code.</p><h2 id="jJtzZ">3. Use a Unique ID that represents your client when adding Accounts</h2><p>To make it easy for you to manage your data within the SISS API, and to assist you with matching data within your systems, when creating Accounts, we strongly recommend providing an (obfuscated) identifier that represents your client which you pass to either:</p><ul><li><p><b>/sds/account-access-consents/consumerconsent</b> as a <i>clientId </i>body parameter</p></li><li><p><b>/sds/account-access-consents/consumerconsent</b> as the <i>clientIdentifier</i> body parameter</p></li></ul><h2 id="3EF3O">4. Track the last transaction ID received for each account</h2><p>Any time you retrieve transactions, you SHOULD store the most recent transaction ID received for the account against the account record in your system.</p><p>The reason to do this, is to make your calls as efficient as possible, so you are only collecting only new transactions. As all data provided to SISS is POSTED transactions up until midnight of the previous day, transaction IDs only increment.</p><p>Alternatively, you could use the last transaction date retrieved (ie the most recent date of a transaction stored against the account in your system). You could then just retrieve data from that date forward.</p><h2 id="KQOSp">5. Allow for recollection of data and use transaction ID for deduplication.</h2><p>There may be cases where a client may want to recollect data for dates which have already been collected.</p><p>If data is recollected, you should use the transaction ID to prevent inserting duplicate transactions into your stored transactions.</p><h2 id="vpm6f">6. Collect data in an efficient manner</h2><p>The SISS REST API's allow you to collect data in bulk for all your customers, or collect in a more targeted manner. Choose the method that is effective for you.</p><h3 id="Y3f3q">Bulk Collection</h3><p>This allows you to collect data in paged data sets, and then match data up within your systems.</p><p>The typical set of calls would be:</p><ol><li><p>Get a List of All Clients - <b>/sds/clients</b><br>Check that you know all the clients you need to be matching data against.</p></li><li><p>Get a List of All Accounts - <b>/banking/accounts</b><br>A list of all accounts available to you. This account list includes, for each account, any clientId you provided in Tip 3 above. Note, this also includes a field high</p></li><li><p>Get a List of All Balances - <b>/banking/accounts/balances?x-v=2</b><br>A list of all balances available to you. This balance list includes, for each balance, the accountId the balance relates to. We recommend providing the x-v=2 parameter to get a list which has a format aligned to CDR version 1.</p></li><li><p>For each account in the List of All Accounts - Get a List of Transactions for an Account - <b>/banking/accounts/{accountId}/transactions?{oldest-time}</b><br>A list of transactions for a specific account. If you have followed Tip 4 above, you SHOULD also only request transactions for accounts where you know there are new transactions (by checking the value stored in your system against the <i>lastTransactionPostedDate</i> field in the account record)</p></li></ol><h3 id="UXO9h">On-demand/Targeted</h3><p>This relies on getting the data for clients based on the clientId, assuming you have followed Tip 3 above</p><ol><li><p>(Optional) Get a List of All Clients - <b>/sds/clients</b><br>Used to check in case any clients have been disabled or added that you have not tracked. Also you can do this if you dont have the clientId in your systems.</p></li><li><p>Get a List of Accounts for a Client - <b>/sds/clients/{clientId}/accounts</b><br>Used to check in case any accounts have been disabled or added that you have not tracked. If you supplied your clientId as per Tip 3, then you can get a list of accounts for just that client.</p></li><li><p>For each account in the List of Accounts for a Client - Get Balances for an Account - <b>/banking/accounts/{accountId}/balances?x-v=2</b><br>A list of balances for the account. We recommend providing the x-v=2 parameter to get a list which has a format aligned to CDR version 1.</p></li><li><p>For each account in the List of Accounts for a Client - Get a List of Transactions for an Account - <b>/banking/accounts/{accountId}/transactions?{oldest-time}</b><br>A list of transactions for a specific account. If you have followed Tip 4 above, you SHOULD also only request transactions for accounts where you know there are new transactions (by checking the value stored in your system against the <i>lastTransactionPostedDate</i> field in the account record)</p></li></ol><h2 id="NUjUN">7. Valid BSB and Account numbers</h2><p>Before submitting requests to register bank data feeds, please use local validation to validate the BSB and Account Numbers entered by clients. These are the same rules that are enforced by the SDS system. All valid BSB are 6 digits in length, the 3rd digit must be in range [2-7], each of which represents a unique ‘State Code’ (i.e. NSW, QLD, VIC)</p><h3 id="JBCSx">BSB General rules</h3><p>While there are some specific rules for each bank (listed below). We also validate each BSB and it must be an active & valid BSB per Australia Payments Network (AUSPAY), even if the BSB passes the rules below, should the BSB not be on the AusPay list we will return an error. Please note some of the BSB's on this list are not actual branches rather internal, test, agency or some other special purpose, as such we may fail some of these BSB's, also we have another list of 'acceptable' BSB's that customers can use even although they may not be on the AusPay list, should you come across a BSB we did not allow, please email us the details at <a href="customerservice@siss.com.au" target="_blank" rel="noopener noreferrer">customerservice@siss.com.au</a></p><p></p><p>Link to website of 'offical' BSB's <a href="https://bsb.auspaynet.com.au/public/BSB_DB.NSF/publicBSB.xsp" target="_self" rel="noopener noreferrer">https://bsb.auspaynet.com.au/public/</a><a href="https://bsb.auspaynet.com.au/public/BSB_DB.NSF/publicBSB.xsp" target="_blank" rel="noopener noreferrer">BSB_DB</a><a href="https://bsb.auspaynet.com.au/public/BSB_DB.NSF/publicBSB.xsp" target="_self" rel="noopener noreferrer">.NSF/publicBSB.xsp</a></p><p></p><h3 id="aKUHo">ANZ - Australia New Zealand Bank</h3><p>BSB length = 6, Starts with 01</p><p>Account Number length 9</p><h3 id="tp7nk">Bank of Melbourne</h3><p>BSB length = 6 Starts with '19' OR '55'</p><p>Account Number length 9</p><h3 id="dQWYq">Bank SA</h3><p>BSB length = 6 Starts with '10'</p><p>Account Number length 9</p><h3 id="O9d9Y">CBA - Commonwealth Bank of Australia</h3><p>BSB length = 6 Starts with '06' OR '76'</p><p>Account Number length 8</p><p>Not available if starts with 5 = term deposit</p><h3 id="IdJOC">Macquarie Bank</h3><p>BSB length = 6 Starts with '18'</p><p>Account Number length 9, and the account number starts with a 1 or 9</p><h3 id="gVP4L">NAB - National Australia Bank</h3><p>BSB length = 6 Starts with '08' OR '78'</p><p>Account Number length 9</p><h3 id="sp4br">St George</h3><p>BSB length = 6 Starts with '11' OR ‘33’</p><p>Account Number length 9</p><h3 id="Jfga8">Westpac</h3><p>BSB length = 6 Starts with '03' OR '73'</p><p>Account Number length 6</p><h3 id="AjxSy">Bank of Queensland</h3><p>BSB length = 6 Starts with ‘12’</p><p>Account Number length 7-10</p><h3 id="XjOaV">Adelaide Bank</h3><p>BSB length = 6 Always ‘610101’</p><p>Account Number length 9</p><h2 id="HvO1X">8. Special Commands & Functions</h2><p>When a bank account is added to the ACSISS service via a authorise consent post, it changes status from (C)reated to (R)eceived to (A)ctive while spending a random amount of time (between 5 & 30 minutes) at each status. Each day the bank account remains active, an arbitrary number of transactions will be added (up to 10) for random values.</p><p></p><p>The following commands can alter the above behaviour by adding a PREFIX to the accountName.</p><ul class="ul ul-default"><li><p>(FAST) - This will speed up the changing of status to a random interval of time between 30 & 60 seconds, meaning it will be active within 3 minutes</p></li><li><p>(FAST=x) - This will speed up the changing of status every x minutes, if you set x=0 then the feed will be active effectively immediatley.</p></li><li><p>(HIST) - Loads a predefined set of 2135 transactions for the previous 61 days at an average of 35 transactions per day</p></li><li><p>(STATIC) - will create two transactions each the feed remains active, one payment & one deposit for $100, meaning the account balance remains static.</p></li><li><p>`(REJ) - This will move the status from (C)reated to (R)eceived to (P)roblem. This rejection mimics the situation of a Bank not approving the bank feed. Rejected feeds also have no auto-generated transaction data</p></li><li><p>(SAP) or (JIWA7) Loads a predefined set of transactions specific to the demonstration data in those ERP solutions.</p></li></ul><p></p><p>Some of these PREFIXES can be stacked to achieve specific tasks; for example (FAST,HIST) will move the feed to active quickly and load the historical transaction data.</p><ul class="ul ul-default"><li><p>"accountName": "(FAST, HIST) Account Name" - This account will be created with 61 days of historical data, and will go from ‘C’ to ‘R’ to ‘A’ in about 3-5 minutes. Every day random transactions will be added.</p></li><li><p>"accountName": "(FAST=0, HIST) Account Name" - This account will be created with 61 days of historical data, and will go from ‘C’ to ‘A’ immediately. Every day random transactions will be added.</p></li><li><p>"accountName": "(FAST, HIST, STATIC) Account Name" - This account will be created with 61 days of historical data, and will go from ‘C’ to ‘R’ to ‘A’ in about 3-5 minutes. Every day a +$10 and a -$10 transaction will be added. The balance will not change.</p></li><li><p>"accountName": "(FAST, REJ) Account Name" - This account will be created and will go from ‘C’ to ‘R’ to ‘P’ in about 2-3 minutes. A problem message will also be populated on the account record.</p></li></ul><p></p><p><mark>NOTE</mark>: Data feeds in the Sandbox are only maintained for 100 days, that is 101 days after a feed was created it will be removed along with all its transactions.</p><p></p><p>An example of these commands in the body of a Authorise Account post</p><p> "sdsinstitutionId": "ANZ",</p><p> "clientIdentifier": "HWSMSF",</p><p> "clientName": "Hello World SMSF",</p><p> "accountName": "(FAST=0,HIST) Current Account",</p><p> "bsb": "012012",</p><p> "accountNumber": "985654159"</p><p></p></div></div></div></section></div></div></div></section><section access-id="50412139-61bd-23de-d072-649210f4402b"><div class="ykiyguxiww"><div class="ncwkpamvyl ncwkpamvyl-xl" role="article"><div class="ProseMirror"><p class="text-nq5w8 text text-xl-align-center text text-lg-align-center text text-md-align-center text text-sm-align-center text text-align-center">Copyright © <a href="https://sissdataservices.com.au" target="_blank" rel="noopener noreferrer">SISS Data Services</a> 2021.</p></div></div></div></section></div></body></html>