ASA Open API v0.6
ASA Open API v0.6
User Guide
Version 0.6 ● 16 November 2022
ASA.Financial
Trademarks
Login with ASA are registered trademarks of ASA Financial. All other trademarks or registered
trademarks are the property of their respective owners.
Disclaimer
The information provided in this document is provided "as is" without warranty of any kind. ASA
Technologies disclaims all warranties, either express or implied, including the warranties of
merchantability and fitness for a particular purpose. In no event shall ASA Technologies be liable for
any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits
or special damages, even if ASA Technologies or its suppliers have been advised of the possibility of
such damages.
Document Lifetime
ASA Technologies may occasionally update online documentation between releases of the related
software. Consequently, if this document was not downloaded recently, it may not contain the most
up-to-date information. Please refer to ASA.Financial for the most current information.
From the Web site, you may also download and refresh this document if it has been updated, as
indicated by a change in this date: September 28, 2022.
ASA Technologies support, product, and licensing information can be obtained as follows.
Product information — Documentation, release notes, software updates, and information about ASA
Technologies products, licensing, and service, are at ASA Technologies website at:
ASA.Financial
https://app.swaggerhub.com/apis/ASA-Financial/ASAOpenAPI/
Note: Please provide your company or entity name when you create the support request
ASA Technologies ASA Open API Version 0.6
Contents
1 INTRODUCTION ............................................................................................................................................. 6
1 Introduction
ASA is a secure and reliable Digital Services Network that connects with the banks in the United
States to allow FinTech (Financial Technology companies that use Consumers’ information) to
access the consumers data. The consumer (Account Holder) authenticates the ASA Vault app
with their Bank data and chooses which data to share with a FinTech. This makes the consumers
data accessible to a FinTech. This is a credible service-providing network that places the
consumer in control of the extent of accessibility of his/her data. It also provides information to
the banks regarding FinTech’s chosen by consumer through the ASA Vault App.
When a consumer uses Login with ASA (OpenID), the consumer can decide what information
they want to share with the FinTech. In this way, logging in with ASA facilitates FinTech’s
accessing the required information from the bank while allowing the consumer to exclusively
control what data is shared.
This is the mobile application that a consumer installs and it connects the consumers account
information, which can be used to allow a FinTech access the account owner's information.
However, ASA Vault does not provide the actual accounts to the FinTech. Rather, it provides
anonymized account information to protect the consumers sensitive financial information.
1.2.5 FinTech
This is the Financial Technologies company that is registered with the ASA platform and intends
to provide services to the consumers and the Financial Institutions.
ASA-generated Id for the currently authenticated Fintech. Only required by endpoints which
access Fintech’s data, or data that a Consumer must have explicitly authorized a certain Fintech
to access. If provided it will be matched against the FintechCode associated with the given bearer
token. For backward compatibility, in v0.0.5 this value is also accepted as ASAFintechCode in
headers or as a Query String parameter.
2.3 Authentication
The Auth process for ASA’s OpenAPI involves two steps: first, each Fintech must call the
/Authorization endpoint, which generates a short-lived OpenId token embedded in an ASA Core
login URL. Then, either using this URL or through the /LoginWithASA endpoint, a bearer token
can be generated and then used for accessing the Consumer’s data that’s been authorized for
the given Fintech. Further details on this process can be found in our “Login with ASA” document.
curl -X 'POST' \
'https://openapiuat.asacore.com/Authentication/Authorization' \
-H 'accept: text/plain' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-d '{
"asaFintechCode": "yourFintechCodeHere",
"applicationCode": "yourApplicationCodeHere",
"authorizationKey": "yourAuthorizationKeyHere",
"redirectUrl": "yourAppSuccessPageHere",
"redirectFailureUrl": "yourAppFailurePageHere",
"scope": "openid",
"subscriptionKey": "yourSubscriptionKeyHere",
"apiVersion": "0.05"
}'
{
"status": 200,
"message": "Success, Authentication done successfully",
"reference": [
{
"requestId": "99999999999",
"timeStamp": "2022-11-14T19:10:12.0161587+00:00"
}
],
"version": "0.0.5",
"data": {
"field": "UniqueLoginUrl",
"message":
"https://authuat.asacore.com/login?idtoken=yourNewlyGeneratedIdToken&key=yo
urSubscriptionKey&id=99999999999"
}
}
curl -X 'POST' \
'https://openapiuat.asacore.com/Authentication/LoginWithASA' \
-H 'accept: text/plain' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-d '{
"userName": "theConsumersEmailAddressHere",
"password": "theConsumersPasswordHere",
"token": "yourIdTokenExtractedFromAuthorizationsUniqueLoginUrlField",
"requestId": "99999999999"
}'
{
"status": 200,
"message": "Success",
"reference": [
{
"requestId": "99999999999",
"timeStamp": "2022-11-14T19:19:24.1518911+00:00"
}
],
"version": "0.0.5",
"data": {
"asaFintechCode": "yourFintechCode",
"asaConsumerCode": "theUsersASAConsumerCode",
"scope": "bearer",
"token": "yourNewlyGeneratedBearerToken",
"tokenExpiryDate": "2022-11-16T19:19:24.5271574Z",
"redirectURL":
"https://www.example.org/asaloginsuccess?asaconsumerCode=theUsersASAConsume
rCode&bearerToken=yourNewlyGeneratedBearerToken&asaFintechCode=yourFintechC
ode&expirydatefortoken=2022-11-16T19:19:24.5271574Z",
"status": "success",
"errorMessage": null,
"errorCode": null
}
}
curl -X 'POST' \
'https://openapiuat.asacore.com/Authentication/RefreshToken' \
-H 'accept: text/plain' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKey' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpoint' \
-d ''
{
"status": 200,
"message": "Success",
"reference": [
{
"requestId": "99999999999",
"timeStamp": "2022-11-14T19:32:28.8143111+00:00"
}
],
"version": "0.0.5",
"data": {
"token": "yourNewlyGeneratedBearerToken",
"tokenExpiryDate": "2022-11-16T19:32:28.8298143+00:00"
}
}
curl -X 'POST' \
'https://openapiuat.asacore.com/Authentication/ForgotPassword' \
-H 'accept: text/plain' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKey' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpoint' \
-d '{
"emailId": "theConsumersEmailAddressHere"
}'
"status": 200,
"message": "Success",
"reference": [
{
"requestId": "99999999999",
"timeStamp": "2022-11-14T19:38:19.0443175+00:00"
}
],
"version": "0.0.5",
"data": "Temporary Password sent via email."
}
curl -X 'POST' \
'https://openapiuat.asacore.com/Authentication/ChangePassword \
-H 'accept: text/plain' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere' \
-d '{
"oldPassword": "theConsumersCurrentlyValidPasswordHere",
"newPassword": "theConsumersNewPasswordHere"
}'
{
"status": 200,
"message": "Success.",
"reference": [
{
"requestId": "99999999999",
"timeStamp": "2022-11-14T19:44:35.0214427+00:00"
}
],
"version": "0.0.5",
"data": "Password changed successfully."
}
2.4 Balance
Endpoints for fetching the Consumer’s Accounts, their balances, and detailed information.
● data: array with objects which each have the following key-value pairs for every
Consumer account that the Fintech is currently granted access for the given Consumer:
○ asaConsumerCode: theUsersASAConsumerCode - ASAConsumerCode for
the given consumer
○ asaFintechCode: yourFintechCode - ASAFintechCode for the given Fitnech
○ accountNumber: accountNumber - ASA-generated account number
○ name: accountName - name of the account
○ description: accountDescription - description of the account
○ dateOpened: ISO-8601UTCtimestamp - timestamp of when the Account was
created
○ balance: double - numeric value of the account’s current balance
○ currencyCode: USD - ISO Currency code for the account’s currency
curl -X 'GET' \
'https://openapiuat.asacore.com/Balance/Accounts' \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'X-ASA-ConsumerCode: theUsersASAConsumerCode' \
-H 'X-ASA-FintechCode: yourFintechCode'\
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere'
{
"status": 200,
"message": "Authorized Accounts for : theUsersASAConsumerCode.",
"reference": [
{
"requestId": "123",
"timeStamp": "2022-11-14T19:49:31.6185878+00:00"
}
],
"version": "0.0.5",
"data": [
{
"asaConsumerCode": theUsersASAConsumerCode,
"asaFintechCode": yourFintechCode,
"accountNumber": oneAuthorizedAccountNumber,
"name": "Savings (example)",
"description": "SAVINGS (example)",
"dateOpened": "2006-08-15T00:00:00",
"balance": 9876.54,
"currencyCode": "USD"
},
{
"asaConsumerCode": theUsersASAConsumerCode,
"asaFintechCode": yourFintechCode,
"accountNumber": anotherAuthorizedAccountNumber,
"name": "Checking (example)",
"description": "Checking (example)",
"dateOpened": "2016-08-15T00:00:00",
"balance": 0.00,
"currencyCode": "USD"
}
]
}
curl -X 'GET' \
'https://openapiuat.asacore.com/Balance/Details' \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'X-ASA-ConsumerCode: theUsersASAConsumerCode' \
-H 'X-ASA-FintechCode: yourFintechCode'\
-H 'AccountNumber: someAuthorizedAccountNumber' \
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere'
{
"status": 200,
"message": "Account balance detail for account:
someAuthorizedAccountNumber.",
"reference": [
{
"requestId": "9999999999",
"timeStamp": "2022-11-14T20:10:42.8833218+00:00"
}
],
"version": "0.0.5",
"data": {
"accountNumber": someAuthorizedAccountNumber,
"accountName": "Savings (example)",
"available": 9876.54,
"current": 9876.54,
"limit": 0,
"isoCurrencyCode": "USD",
"unofficialCurrencyCode": "USD"
}
2.5 Callbacks
Placeholder for not yet implemented endpoints:
● GET /Register
● GET /UnRegister
● GET /ActivityList
● GET /FailedRequests
● version: version number of the endpoint which actually produced this response
● data: object with a “dynamicLinkInfo” key, which in turn contains the following key-value
pairs:
○ domainUriPrefix: baseURL - the domain to which the generated link will point to
○ link: fullURL - URL for accessing ASA vault directly to the given Fintech and
Consumer
○ androidInfo: object - contains a key-value pair with:
■ androidPackageName: com.asa.vault
○ iosInfo: object - contains a key-value pair with:
■ iosBundleId: com.asa.vault
curl -X 'GET' \
'https://openapiuat.asacore.com/DynamicLink' \
-H 'accept: text/plain' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'X-ASA-ConsumerCode: theUsersASAConsumerCode' \
-H 'X-ASA-FintechCode: yourFintechCode' \
-H 'FirstName: recepientsFirstName' \
-H 'LastName: recipientsLastName' \
-H 'BearerToken: bearerTokenForLinkHere' \
-H 'RequestId: 99999999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere'
{
"status": 200,
"message": "Account balance detail for account:
someAuthorizedAccountNumber.",
"reference": [
{
"requestId": "9999999999",
"timeStamp": "2022-11-14T20:10:42.8833218+00:00"
}
],
"version": "0.0.5",
"data": {
"dynamicLinkInfo": {
"domainUriPrefix": "https://asacore.com",
"link":
"https://asacore.com/asavault?consumercode=theUsersASAConsumerCode&firstnam
e=recepientsFirstName&lastname=recepientsLastName&bearerToken=bearerTokenFo
rLink&asaFintechCode=yourFintechCode",
"androidInfo": {
"androidPackageName": "com.asa.vault"
},
"iosInfo": {
"iosBundleId": "com.asa.vault"
}
}
}
}
2.7 Institution
Placeholder for not yet implemented endpoints:
● GET /List
2.8 Product
Endpoints for fetching the currently supported Products.
curl -X 'GET' \
'https://openapiuat.asacore.com/Products \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere'
{
"status": 200,
"message": null,
"reference": [
{
"requestId": "99999",
"timeStamp": "2022-11-14T20:51:36.2066059+00:00"
}
],
"version": "0.0.5",
"data": [
"assets",
"auth",
"balance",
"identity",
"investments",
"liabilities",
"payment_initiation",
"identity_verification",
"transactions",
"credit_details",
"income",
"income_verification",
"deposit_switch",
"standing_orders",
"transfer",
"employment",
"recurring_transactions"
]
}
2.9 TransactionCategory
Endpoints for fetching the currently supported Transaction Categories.
○ sub_categories: list - list with the names of all the children-categories of that
have this category as their parent, otherwise an empty list
○ hierarchy: list - if this category has any siblings (if other categories with the
same parent as this one exist), then a list of their names, otherwise null
curl -X 'GET' \
'https://openapiuat.asacore.com/TransactionCategories \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere'
{
"status": 200,
"message": null,
"reference": [
{
"requestId": "99999999",
"timeStamp": "2022-11-14T21:06:48.8848546+00:00"
}
],
"version": "0.0.5",
"data": [
{
"category_id": 1,
"name": "Bank Fees",
"group": "",
"sub_categories": [],
"hierarchy": null
},
{
"category_id": 2,
"name": "Donation",
"group": "",
"sub_categories": [],
"hierarchy": null
},
{
"category_id": 3,
"name": "Entertainment",
"group": "",
"sub_categories": [],
"hierarchy": null
},
...
]
}
2.10 Transactions
Endpoints for fetching the Transactions associated with the current Consumer’s accounts.
● start_date: optional, the earliest date for which data should be returned (starting at
0:00:00 for the given date, time portion is discarded if defined)
● end_date: the latest date for which data should be returned (including whole date, time
portion is discarded if defined)
● categoryId: optional, Id of the Transaction Category to restrict the search results to,
CategoryIds can be obtained from the /TransactionCategories endpoint.
● transactionStatus: optional, Status Id to restrict the search. Accepted Values: 1-Pending,
2-Posted
● transactionType: optional, Type Id to restrict the search. Accepted Values: 1-Debit, 2-
Credit
● includeIgnoredTransactions: optional, whether to include Transactions marked as
“Ignored” in the DB, or not. If not provided, defaults to false.
curl -X 'GET' \
'https://openapiuat.asacore.com/Transactions' \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'X-ASA-ConsumerCode: theUsersASAConsumerCode' \
-H 'X-ASA-FintechCode: yourFintechCode' \
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere' \
-d '{}'
curl -X 'GET' \
'https://openapiuat.asacore.com/Transactions' \
-H 'accept: */*' \
-H 'Ocp-Apim-Subscription-Key: yourApimSubscriptionKeyHere' \
-H 'X-ASA-ConsumerCode: theUsersASAConsumerCode' \
-H 'X-ASA-FintechCode: yourFintechCode' \
-H 'RequestId: 99999999' \
-H 'Authorization: bearer
yourBearerTokenFromLoginWithAsaOrRefreshTokenEndpointHere' \
-d '{
"options": {
"count": 1,
"offset": 1
},
"start_date": "2009-03-01T00:00:00.000Z",
"end_date": "2022-10-29T17:52:11.030Z",
"includeIgnoredTransactions": true
}'
{
"status": 200,
"message": "Success",
"reference": [
{
"requestId": "99999999",
"timeStamp": "2022-10-14T16:36:37.7546127+00:00"
}
],
"version": "0.0.5",
"data": [
{
"request_id": "99999999",
"account": {
"account_id": "someAuthorizedAccountNumber",
"balances": {
"available": 4878.45,
"current": 4878.45,
"limit": 0,
"iso_currency_code": "USD",
"unofficial_currency_code": "USD"
},
"mask": null,
"name": " - SAVINGS",
"official_name": null,
"type": null,
"subtype": null,
"verification_status": null
},
"transactions": [
{
"transaction_type": "Credit (example)",
"transaction_id": "1234-5678-901234-56789-01234",
"account_owner": "theConsumersName",
"pending_transaction_id": null,
"pending": false,
"payment_channel": null,
"payment_meta": null,
"name": "Deposit Dividend 1.000%",
"merchant_name": "Deposit Dividend 1.000%",
"location": null,
"authorized_date": "2010-03-31",
"authorized_datetime": "2010-03-31T13:13:0.0+00:00",
"date": "2010-03-31",
"datetime": "2010-03-31T13:13:0.0+00:00",
"category_id": null,
"category": "General (example)",
"unofficail_currency_code": "USD",
"iso_currency_code": "USD",
"amount": 4.14,
"account_id": "someAuthorizedAccountNumber",
"transaction_code": "",
"check_number": null,
"personal_finance_category": null
},
...
],
"total_transactions": totalTransactionsInDataBase,
"item": {
"item_id": null,
"institution_id": null,
"webhook": null,
"error": null,
"available_products": null,
"billed_products": null,
"consent_expiration_time": null,
"update_type": null
}
},
...
]
}
3 Technical Implementation
This section provides a step-by-step guide for a FinTech to integrate with ASA OpenID
Authentication referred to as Login with ASA
SANDBOX: https://openapiuat.asacore.com/Authentication
PRODUCTION: https://openapi.asacore.com/Authentication
2. The FinTech will initiate a Rest API call to the Authorization endpoint and include the
following parameters:
a. ASAFintechCode: Provided by ASA. This is the same as the Client ID within an Open ID
implementation.
b. AuthorizationKey: Provided by ASA. This is the same as the Client Secret within an Open
ID implementation.
c. ApplicationId: [Reserved]
d. RedirectURL: URL where the consumer shall be redirected to after successful
authentication. Fintech to provide this URL.
e. RedirectFailureURL: URL where the consumer shall be redirected to after failure of
authentication. Fintech to provide this URL.
f. Scope: provide “openid” as a value.
g. APIVersion: This is [Optional]. Defines which version of ASA OpenAPI you want to
connect to.
3. Once the request is authorized successfully, the user will be presented with the following
screen:
Term Meaning
ASA Technologies
The company name on file that is doing business as ASA Financial
Inc
User that is accessing the FinTech Application and is also known as the
Consumer
Financial Institution Account Owner
Ocp-Apim- Subscription key required in all endpoint calls in order for access to be
Subscription-Key allowed by our API Management layer.
Identification for the current transaction. If provided, the same value will
RequestId Header be present in the Response’s headers, if not, it will be auto-generated
by our backend layer. It is recommended that it is provided by the client.
Term Meaning