# Welcome to Flinks API Reference Source: https://docs.flinks.com/api-home Flinks uses a RESTful API that allows developers to seamlessly integrate with our products. It provides a secure connection to our endpoints so that you can receive account information, data enrichment, confirm a customer's identity, initiate a payment, and more. Explore the options below or navigate to one of our endpoints to view our API specifications.
Learn how to use our APIs and make your first API call. Get started → Complete the authorization process and connect an account. Get started → Go to our OAuth endpoints if you're using Outbound. Get started → Get detailed information for a connected account. Get started →
# Endpoints Source: https://docs.flinks.com/api/authorize/endpoints Refer to the following table for a list of endpoints related to Authorization. | **NAME** | **METHOD** | **DESCRIPTION** | | :------------------------------------------------------------- | :--------- | :------------------------------------------------------------------------------------------------ | | [GenerateAuthorizeToken](./endpoints/generate-authorize-token) | POST | Generates a one-time authorize token (valid for 30 minutes) used to authenticate future requests. | | [Authorize](./endpoints/authorize) | POST | Required to call most Flinks endpoints. | # /Authorize Source: https://docs.flinks.com/api/authorize/endpoints/authorize POST /v3/{customerId}/BankingServices/Authorize Start a session and fetch cached banking data for a user. Pass your authorize token (from [/GenerateAuthorizeToken](./generate-authorize-token)) via the `flinks-auth-key` header. See [Authentication Reference](../../../guides/connect/authentication-reference) for all credentials and headers. If the response is `203`, MFA is required. See the [MFA flow](../../../guides/connect/legacy-api-integrations#multi-factor-authentication), then resubmit with `RequestId` and `SecurityResponses`. For error cases, see [Authentication Troubleshooting](../troubleshooting). # /GenerateAuthorizeToken Source: https://docs.flinks.com/api/authorize/endpoints/generate-authorize-token POST /v3/{customerId}/BankingServices/GenerateAuthorizeToken Use the /GenerateAuthorizeToken endpoint to get an Authorize Token. Tokens expire after 30 minutes of inactivity. Call this endpoint again to get a new one. Use the token by passing it as `authorizeToken={token}` on your Flinks Connect iframe URL, or as the `flinks-auth-key` header when calling [/Authorize](./authorize) directly. See [Authentication Reference](../../../guides/connect/authentication-reference) for all credentials and [Authentication Troubleshooting](../troubleshooting) for error cases. # Error Codes Source: https://docs.flinks.com/api/authorize/error-codes On this page, you will be able to find information on: * API error codes * Errors in the Client Dashboard ## API error codes **200 HTTP Codes** | **HTTPS STATUS CODE** | **FLINKS CODE** | **DESCRIPTION** | | :-------------------- | :--------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 200 | `OK` | Settings applied; returns the updated resource. Reproduced by completing a successful request. | | 201 | `CREATED` | The request has been fulfilled and a new resource has been created. Reproduced by completing a successful request. | | 202 | `OPERATION_PENDING` | The process is ongoing in the background. At this point your flow must change to the async endpoint. Reproduced by performing a cached flow immediately after Authorizing a new account. | | 202 | `OPERATION_DISPATCHED` | Your sync request took more than 210 seconds and it was dispatched in the background. Reproduced by having a live request to gather GetAccountDetails in more than 210 seconds. | **400 HTTP Codes** | **HTTP STATUS CODE** | **FLINKS CODE** | **DESCRIPTION** | | :------------------- | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 400 | `SESSION_NONEXISTENT` | A request was made with an expired RequestId. Reproduced by using an old RequestId for a new request. | | 400 | `CARD_IN_USE` | An operation was requested while the account is still being processed. Reproduced by calling the DeleteCard endpoint immediately after Authorizing a new account. | | 401 | `ACCESS_DENIED` | Authentication was unsuccessful. Reproduced by calling the Authorize endpoint without having valid authentication credentials. | | 401 | `INVALID_LOGIN` | The provided LoginId is invalid. Reproduced by calling the Authorize endpoint using a non existent LoginId. | | 401 | `INVALID_LOGIN` | The provided username or/and password is/are invalid. Reproduced by calling the Authorize endpoint using non valid credentials. | | 401 | `INVALID_REQUEST` | Credentials are missing/incomplete, or syntax is incorrect (e.g. missing comma). Also occurs when request source is unsupported due to URL formatting errors (double slash //v3 instead of /v3) or missing required headers. Reproduced by making a typo, removing a comma, or incorrect URL formatting. | | 401 | `INVALID_SECURITY_RESPONSE` | The user has provided incorrect or incomplete MFA answers and cannot retry. Reproduced by providing an invalid MFA answer to an Authorize request. | | 401 | `INVALID_USERNAME` | The username provided was different from what the bank expected. Reproduced by providing an invalid username to an Authorize request. | | 401 | `INVALID_PASSWORD` | The password provided was different from what the bank expected. Reproduced by providing an invalid password to an Authorize request. | | 401 | `QUESTION_NOT_FOUND` | The MFA prompt doesn't have a stored answer. | | 401 | `RETRY_LATER` | Flinks was not able to open a connection with the selected financial institution. Reproduced by making an authorize with the following credentials to Flinks Capital: Username: test\_service\_unavailable Password: Everyday. | | 401 | `TOO_MANY_REQUESTS` | The endpoint has received too many requests in a given amount of time. | | 401 | `UNKNOWN_CHALLENGE_KEY` | The /Authorize request to respond an MFA contain an answer to the wrong MFA prompt. Reproduced by changing the MFA prompted, or leave the MFA prompt blank in the input Change the MFA response or leave the MFA response blank. | | 401 | `CONCURRENT_SESSION` | Another session is already opened with this LoginId. Reproduced by opening two requests simultaneously with the same account. | | 401 | `UNAUTHORIZED` | The card was not authorized. Either there is a problem with bank, or the GetAccountsDetail endpoint was called before authorized. Reproduced by calling the GetAccountsDetail endpoint during an MFA prompt without answering the MFA question. | | 401 | `UNHANDLED` | An error was encountered that cannot be handled or processed. | | 401 | `DISABLED_LOGIN` | The account has been deactivated by the financial institution. The account holder must contact their bank. Reproduced by logging into a deactivated account. | | 401 | `NEW_ACCOUNT` | The end user must take action directly on their online banking before connecting an account with Flinks. Reproduced by logging in to an account where the user must take action on the bank's website (e.g. to accept a consent form). | | 401 | `SESSION_EXPIRED` | The RequestId expired after 8 mins of inactivity during Authorize or 30 mins timeout for data processing. | | 401 | `ALREADY_AUTHORIZED` | When the /Authorize endpoint is called after the user has already been authorized. Reproduced by answering an MFA for an already authorized RequestId. | | 401 | `SECURITYRESPONSES_INCOMPLETE` | Not all the prompted MFA questions had answers in the response request. | | 404 | `NO_TRANSACTION` | The account does not have any transactions. Reproduced by performing an Attributes request for an account with no GetAccountsDetails previously processed. | | 405 | `DISABLED_INSTITUTION` | The selected financial institution is not available. | **500 HTTP Codes** | **HTTP STATUS CODE** | **FLINKS CODE** | **DESCRIPTION** | | :------------------- | :--------------------- | :-------------------------------------------------------------------------------------------------------------- | | 500 | `AGGREGATION_ERROR` | Flinks had an unexpected error and could not process your request. | | 501 | `METHOD_NOT_AVAILABLE` | The requested API is not currently enabled in your instance. Kindly contact us if you wish to use this feature. | ## Errors in the Client Dashboard The following table lists all possible errors that you may receive when using Client Dashboard. | **STATUS CODE** | **STATUS CODE** | **DESCRIPTION** | | :-------------- | :--------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- | | 203 | **Answering Security Challenge** | The user is answering the security questions. | | 200 | **Partially Completed** | Account summary was completed. We are still processing the account details. | | 401 | **Session Expired** | The user's session expired. | | 200 | **Completed** | The request was completed successfully. | | 401 | **Invalid Password** | The request was completed successfully. | | 401 | **Invalid Username** | The user entered an invalid username. | | N/A | **Not Completed** | The request was not completed. | | 401 | **Invalid Login** | The credentials the user provided were incorrect. | | 401 | **New Account** | The user needs to perform an action on the online banking site and try again later. | | 401 | **Disabled Login** | The user account is locked out. The user needs to reset his password directly on the online banking website. | | 401 | **Retry Later** | After several attempts, we were unable to log into the user account. The user needs to try again later. | | 401 | **Invalid Security Response** | The security answer(s) the user entered are invalid. | | 401 | **Unknown Challenge Key** | One or more of the Security Challenge Prompts required are missing in the provided response. | | 401 | **Unauthorized** | The institution did not authorize the access of the summary page. | | 202 | **Operation Pending** | The operation is still processing. | | 202 | **Operation Dispatched** | The operation has been dispatched and will be processed soon. | | 200 | **Get Statements Complete** | We successfully fetched the PDF statements. | | 200 | **Scoring Insight Completed** | We successfully generated the score. | | 400 | **Session Nonexistent** | The session does not exist. | | 401 | **Concurrent Session** | Two or more sessions were triggered at the same time. | | 200 | **Get Details Complete Statements Still Processing** | Account details was completed. We are still processing the statements. | | 401 | **Bank Maintenance Retry Later** | The institution was under maintenance. The user needs to try again later. | | 200 | **Ocr Files Uploaded** | Files was uploaded successfully. We are processing the statements. | | 200 | **Ocr Integration Started** | Files was uploaded successfully. We are processing the statements. | | N/A | **Ocr Files Integration Failure** | One or more files uploaded are rejected or not supported. Click on the request for more details. | | N/A | **Ocr Completed With Partial Error** | One or more files uploaded are rejected or not supported. Click on the request for more details. | ## Warnings in the Client Dashboard The following warning messages display when a connection is successful, but certain information is missing. | **WARNING** | **DESCRIPTION** | | :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | | `NoAccounts` | We're not able to extract the account | | `NoHolder` | We're not able to see the name of the account holder | | `KycIncomplete` | KYC information is incomplete | | `NoAddress` | We're not able to see the address that's associated with this account | | `AddressIncomplete` | The address that's associated with the account is missing or incomplete | | `AccountIbvIncomplete` | Some accounts with IBV (instant bank verification) are incomplete | | `TransactionIncomplete` | Some transactions are missing details | | `TransactionNull` | The account has no transactions that are associated with it | | `AccountNumberIncomplete` | Some account numbers are missing or incomplete | | `TransactionsWrongOrder` | The transactions are in the wrong order | | `AccountWithoutUrl` | The account URL is missing from the account details | | `AccountDuplicate` | The account number is a duplicate | | `TransactionDuplicate` | The transaction is a duplicate | | `ValidateCurrency` | The balance is not a valid value for an amount in this currency | | `MissingOperationAccounts` | We're missing the operations account | | `NoTransactions` | We're not seeing a transaction on the account | | `AccountIbvUnavailable` | IBV is unavailable for the account | | `HolderIbvUnavailable` | IBV is unavailable for the account holder | | `MissingStatementsPDF` | Some accounts are missing PDF statements | | `InvalidEmail` | The KYC email is invalid | | `NoLastMonthTransaction` | Some accounts had no transactions last month | | `PciNonCompliantCardNumber` | PCI Non-Compliant card number | | `DesjardinsMissingConsent` | Missing consent for Desjardins | | `TransactionsMisconfigured` | Transactions for this account should not exist because the client used `WithTransactions:false` | | `WindowInUse` | The same browser window is being requested by two different `requestIds` | | `NoLast15DaysTransaction` | We were not able to locate any transactions within the past 15 days | | `MFAAfterAuthorization` | Certain financial institutions require additional MFA steps after authentication | | `ProductDetailsMissing` | Client has requested product details but we are unable to return any | | `ProductDetailsIncomplete` | Client has requested product details but we are only able to return partial data | | `BalanceMismatch` | The balance in the account summary is different in the balance that's showing at the end of the last transaction on the account | # Authorize Token Source: https://docs.flinks.com/api/authorize/getting-started When completing the authorization process both for Flinks Connect and direct API connections, you must pass a valid authorize token to be able to access account data. This adds an extra layer of security by ensuring that only the intended person is accessing the account. For a summary of all credentials, headers, and which value to pass on each endpoint, see the [Authentication Reference](../../guides/connect/authentication-reference). ## How to pass an authorize token Complete the steps below to pass us an authorize token each time you authenticate. ### Step 1: Receive a secret key from Flinks Flinks provides a secret key during the integration process. This is a unique key that identifies you within the Flinks system and grants you access to our APIs. Use your secret key to generate an authorize token. This allows us to confirm your identity and ensure the correct person is accessing the data. ### Step 2: Generate an authorize token Call the [/GenerateAuthorizeToken](./endpoints/generate-authorize-token) endpoint and pass your secret key. This token can only be used once and is active for 30 minutes. The token expires if it's not used within 30 minutes and you must generate a new one. ### Step 3: Send us an authorize token to successfully authenticate Depending on your integration, if you are using Flinks Connect or a direct API connection, you will pass the authorize token in one of the following ways: * For Flinks Connect integrations, pass it using a customization parameter in the iframe URL. * For direct API connections, pass it using a header parameter when you call the `/Authorize` endpoint. For more information about how to do this for each integration type, review the following sections: #### Sending an authorize token for Flinks Connect integrations If you are using Flinks Connect, pass the authorize token using a [*authorizeToken customization parameter*](../../guides/connect/flinks-connect/widget#pass-an-authorize-token). Add the [authorizeToken customization parameter](../../guides/connect/flinks-connect/widget) to your Flinks Connect iframe URL, then pass your authorize token using the format authorizeToken=123-456-789. Replace 123-456-789 with your valid token. For example: ```url Url theme={null} https://yourinstance-iframe.private.fin.ag/?redirectUrl=flinks.com&authorizeToken=d65f1adb-8ebc-48dc-be8b-20c773ba1565 ``` #### Sending an authorize token for direct API integrations If you are using a direct API integration, pass the authorize token through the /Authorize endpoint. Call the [`/Authorize`](./endpoints/authorize) endpoint to authenticate, then pass the authorize token using the header parameter `flinks-auth-key`. **Example API call:** ```bash theme={null} curl --request POST \ --url https://yourinstance-api.private.fin.ag/v3/{customerId}/BankingServices/Authorize \ --header 'Content-Type: application/json' \ --header 'flinks-auth-key: d65f1adb-8ebc-48dc-be8b-20c773ba1565' \ --data '{ "LoginId": "your-login-id", "MostRecentCached": true }' ``` ## Need Help? If you encounter authentication issues while setting up authorize tokens, see our comprehensive [Authentication Troubleshooting](./troubleshooting) guide for detailed solutions to common problems including URL formatting, header configuration, and token management. # REST API Source: https://docs.flinks.com/api/authorize/rest-api ## Protocols The Flinks API is a RESTful service that adheres to HTTP methodologies as defined by [RFC 2616](https://tools.ietf.org/html/rfc2616). It enables secure, structured communication between your application and Flinks services. ### **Protocols & Security** * **Protocol** : REST over HTTPS * **Security** : Only TLS v1.2+ is supported. Connections using older versions of TLS will be rejected. * **Content-Type** : All requests must include the header `application/json` * **Request Body** : Must be valid JSON when applicable. ## **Environment & URL Structure**

Note on the API call URL

In this guide, the sandbox instance is used. Therefore, you will need to adjust the API call URL for your needs.
When integrating with Flinks, ensure you use the correct environment (e.g., sandbox or production). The API URL structure includes your instance name and customerId, which are provided during onboarding. ```http http theme={null} https://{instance}-api.private.fin.ag/v3/{customerId}/BankingServices/Authorize ``` Example: If your instance is `yourcompany` and your `customerId` is `334a74ab-6592-4431-a6a0-3f5585d8019d`, the URL would be: ```http http theme={null} https://yourcompany-api.private.fin.ag/v3/334a74ab-6592-4431-a6a0-3f5585d8019d/BankingServices/Authorize ``` ## Testing the API You can test API calls directly from the documentation interface. To do so, you’ll need a valid `loginId` from your production instance. * Always specify your environment (sandbox or production) in API calls. * Ensure your customerId and instance are correctly configured. * Use HTTPS and TLS v1.2+ for all communications. * Validate your JSON payloads before sending requests. # Authentication Troubleshooting Source: https://docs.flinks.com/api/authorize/troubleshooting This page provides solutions to common authentication issues when working with Flinks authorization endpoints. For a summary of all credentials and which header/value to use on each endpoint, see the [Authentication Reference](../../guides/connect/authentication-reference). ## Common Error Messages ### "You must provide a valid authorize token" Error **Problem:** Getting 401 Unauthorized error **Solutions:** * Verify your secret key is correct and hasn't expired * Check the header name is exactly `flinks-auth-key` (not `x-api-key` or `Authorization`) * For [/GenerateAuthorizeToken](./endpoints/generate-authorize-token): Use your secret key in the header * For [/Authorize](./endpoints/authorize): Use the generated authorize token (not the secret key) ### Authentication Token Issues **"You must provide a valid auth key"** (when generating tokens) * Verify your secret key is correct * Ensure you're using the secret key provided by Flinks during integration setup * Check that you're using the correct environment credentials **"LoginId not found or invalid"** (when authorizing) * Confirm the LoginId was obtained from a successful Flinks Connect session * Verify you're using the correct environment (sandbox vs production) * Check that the LoginId hasn't been deleted via [/DeleteCard](../connect/endpoints/account-linking/delete-card) ## Token Management ### Token Usage Rules **Important Notes:** * The generated authorize token is **single-use only** * Token expires after **30 minutes** if unused * Use the token immediately in your next API call (either Flinks Connect or [/Authorize](./endpoints/authorize) endpoint) * Generate a new token for each authentication flow **Token Reuse Error:** ```javascript theme={null} // ❌ DON'T DO THIS const token = 'generated-once'; await callAuthorize(token); await callAuthorize(token); // This will fail! // ✅ CORRECT const token1 = await generateToken(); await callAuthorize(token1); // Later, for another user/session: const token2 = await generateToken(); // New token await callAuthorize(token2); ``` ## Header Configuration Issues ### Wrong Header Names ```bash theme={null} # ❌ DON'T USE THESE --header 'x-api-key: token' # Wrong header name --header 'Authorization: token' # Wrong header name --header 'Bearer: token' # Wrong header name ``` ```bash theme={null} # ✅ CORRECT --header 'flinks-auth-key: token' # Correct header name ``` ### Header Requirements by Endpoint | Endpoint | Header Name | Header Value | | --------------------------------------------------------------- | ----------------- | --------------------------- | | [/GenerateAuthorizeToken](./endpoints/generate-authorize-token) | `flinks-auth-key` | Your secret key | | [/Authorize](./endpoints/authorize) (Direct API) | `flinks-auth-key` | Generated authorize token | | Flinks Connect | N/A | Pass token as URL parameter | **Important:** Do not confuse `flinks-auth-key` with `x-api-key`. Always use `flinks-auth-key` for Flinks authentication. ## URL Format Issues ### URL Format Validation Ensure your URLs follow this exact format: ``` https://{instance}-api.private.fin.ag/v3/{customerId}/BankingServices/{endpoint} ``` **Common mistakes:** * ❌ `https://toolbox-api.private.fin.ag//v3/...` (double slash) * ❌ `https://toolbox.api.private.fin.ag/v3/...` (wrong subdomain format) * ✅ `https://toolbox-api.private.fin.ag/v3/...` (correct) ### Environment-Specific URLs | Environment | Instance | API Base URL | Iframe Base URL | | --------------- | ----------------- | -------------------------------------- | ----------------------------------------- | | Sandbox/Testing | `toolbox` | `https://toolbox-api.private.fin.ag` | `https://toolbox-iframe.private.fin.ag` | | Production | Your company name | `https://{company}-api.private.fin.ag` | `https://{company}-iframe.private.fin.ag` | Never use production credentials in sandbox or vice versa. Each environment requires its own set of credentials. ## Environment Configuration ### Sandbox vs Production Setup **Sandbox/Testing Environment:** * **Instance:** `toolbox` * **URL:** `https://toolbox-api.private.fin.ag/v3/{customerId}/...` * **Use test credentials** for generating authorize tokens **Production Environment:** * **Instance:** Your company name * **URL:** `https://{yourcompany}-api.private.fin.ag/v3/{customerId}/...` * **Use production credentials** provided by Flinks ## Integration Flow Issues ### Authentication Flow Validation The correct authentication flow: 1. **Obtain Secret Key**: Get from Flinks during integration setup 2. **Generate Authorize Token**: Call [/GenerateAuthorizeToken](./endpoints/generate-authorize-token) with secret key 3. **Use Token Immediately**: * **Flinks Connect**: Add `authorizeToken={token}` to iframe URL * **Direct API**: Pass token as `flinks-auth-key` header to [/Authorize](./endpoints/authorize) 4. **Handle Response**: Process successful authentication or error responses ### Common Integration Mistakes **Wrong Token Type:** * Use **secret key** when calling [/GenerateAuthorizeToken](./endpoints/generate-authorize-token) * Use **authorize token** when calling [/Authorize](./endpoints/authorize) * Never confuse these two - they serve different purposes **Expired Tokens:** * Generate new tokens for each authentication session * Don't cache or reuse tokens across multiple sessions * Implement token refresh logic in your application ## Need Additional Help? If these troubleshooting steps don't resolve your issue: 1. Check the [Error Codes](./error-codes) page for specific error code documentation 2. Review the [Getting Started](./getting-started) guide for complete setup instructions 3. [Contact Flinks](../../guides/support/contact-flinks) with specific error details and request context # Endpoints Source: https://docs.flinks.com/api/connect/endpoints Refer to the following table for a list of endpoints related to Connect products at Flinks. | **SECTION** | **DESCRIPTION** | | :----------------------------------------------------- | :-------------------------------------------------------------------- | | [Banking Account Linking](./endpoints/account-linking) | Connect customer bank accounts so that you can start processing data. | | [Webhooks](./webhooks) | Set up a webhook to receive your data automatically from Flinks. | # /AnswerMFAQuestions Source: https://docs.flinks.com/api/connect/endpoints/account-linking/answer-mfa-questions PATCH /v3/{customerId}/BankingServices/AnswerMFAQuestions The `AnswerMFAQuestions` endpoint allows you to submit responses to multi-factor authentication questions in order to complete the authentication process and refresh the associated financial card. **Availability:** This endpoint is supported only in Canada and only for institutions using simple security questions as their MFA method. **Note:** This endpoint is specific to the Enhanced MFA flow, which preemptively collects simple security question answers to improve Nightly Refresh success. It does not handle advanced MFA types such as two-step verification, push notifications, or other specialized authentication mechanisms. Those are fully supported through Flinks' standard authentication flow via the [/Authorize](/api/authorize/endpoints/authorize) endpoint and Flinks Connect. The `AnswerMFAQuestions` endpoint allows you to submit responses to multi-factor authentication questions in order to complete the authentication process and refresh the associated financial card. **Availability:** This endpoint is supported only in Canada and only for institutions using simple security questions as their MFA method. **Note:** This endpoint is specific to the Enhanced MFA flow, which preemptively collects simple security question answers to improve Nightly Refresh success. It does not handle advanced MFA types such as two-step verification, push notifications, or other specialized authentication mechanisms. Those are fully supported through Flinks' standard authentication flow via the [/Authorize](/api/authorize/endpoints/authorize) endpoint and [Flinks Connect](/guides/connect/flinks-connect/widget). # /DeleteCard Source: https://docs.flinks.com/api/connect/endpoints/account-linking/delete-card DELETE /v3/{customerId}/BankingServices/DeleteCard/{loginId} Delete all data that's associated with a specific user account. Use the `/DeleteCard` endpoint to delete all data that's associated with a specific user account. # /GetAccountsDetail Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-accounts-detail POST /v3/{customerId}/BankingServices/GetAccountsDetail To retrieve full account details, including transactions, the holder's name, address, email and phone number, use the /GetAccountsDetail endpoint. To retrieve full account details, including transactions, the holder's name, address, email and phone number, use the **/GetAccountsDetail** endpoint. You must first call the **/Authorize** endpoint to get a valid `RequestId`. ## Accounts Detail The `/GetAccountsDetail` endpoint returns the following information about each of the accounts that are linked to the session: | **PERSONAL INFORMATION** | **ACCOUNT INFORMATION** | **TRANSACTION HISTORY** | | ------------------------ | ------------------------- | ----------------------- | | Name | Title | Transaction date | | Address | Transit or Routing Number | Transaction description | | Civic address | Institution number | Credit or debit amount | | City | Account number | Current balance | | Province | Balance | | | Postal code | Category | | | PO Box | Category type | | | Country | Currency | | | E-mail | Account type | | | Phone number | | | #### Handling a 202 response `/GetAccountsDetail` typically returns a `202` on the initial call. This means the data is still processing. When you receive a `202`, poll [`/GetAccountsDetailAsync`](../account-linking/get-accounts-detail-async) with the same `RequestId` every 10 seconds until you receive a `200`. Set a maximum timeout of 30 minutes. `/GetAccountsDetailAsync` is a `GET` endpoint that acts as the polling companion to `/GetAccountsDetail`. The `200` response from `/GetAccountsDetailAsync` contains the same payload as a `200` from `/GetAccountsDetail`. For the full data retrieval flow, including prerequisites, see [Retrieve Account Data](../../../../guides/connect/retrieve-account-data). Your server must handle `202` responses. Do not treat a `202` as an error. As an alternative to polling, you can configure [webhooks](../../webhooks) to receive the data automatically when processing completes. # /GetAccountsDetailAsync Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-accounts-detail-async GET /v3/{customerId}/BankingServices/GetAccountsDetailAsync/{requestId} Get pending requests from GetAccountsDetail. `/GetAccountsDetailAsync` is the polling companion to [`/GetAccountsDetail`](../account-linking/get-accounts-detail). Call this endpoint only after receiving a `202` from `/GetAccountsDetail`. This is a `GET` request. Pass the `RequestId` from your `/GetAccountsDetail` call as a path parameter. ## Polling for results When `/GetAccountsDetail` returns a `202`, poll `/GetAccountsDetailAsync` to check if the data has finished processing: 1. Call `/GetAccountsDetailAsync` with the `RequestId`. 2. If the response is `202`, wait **10 seconds** and call again. 3. Repeat until you receive a `200`. 4. Set a maximum timeout of **30 minutes** to avoid infinite loops. Most requests finish processing within a few seconds. ## 200 response The `200` response from `/GetAccountsDetailAsync` contains the same payload as a `200` from `/GetAccountsDetail`: full account details, holder information, and transaction history. For the full data retrieval flow, see [Retrieve Account Data](../../../../guides/connect/retrieve-account-data). # /GetAccountsSummary Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-accounts-summary POST /v3/{customerId}/BankingServices/GetAccountsSummary To access general account details such as the cardholder's name (when available), account balance, account category and EFT eligibility, use the /GetAccountsSummary endpoint. To access general account details such as the cardholder's name (when available), account balance, account category and EFT eligibility, use the **/GetAccountsSummary** endpoint. Before calling this endpoint, you must first invoke the **/Authorize** endpoint to obtain a valid `RequestId`. This `RequestId` is required to successfully request **/GetAccountsSummary.** ### Accounts Summary The **/GetAccountsSummary** endpoint provides the following details for all linked accounts: | **PERSONAL INFORMATION** | **ACCOUNT INFORMATION** | | ---------------------------- | ----------------------- | | Holder name (when available) | EftEligibleRatio | | | ETransferEligibleRatio | | | Account title | | | Account balance | | | Account category | | | Currency | | | Account type | ### EFT Eligibility The `EftEligibleRatio` field is a decimal value between 0 and 1, representing a percentage. It reflects how often we've successfully retrieved the necessary information to perform an Electronic Funds Transfer (EFT) from a given account. The higher the number, the higher the possibility is of getting the required information from the **/GetAccountDetails** endpoint. Use this field to guide users in selecting an account for EFT transactions. It helps filter out accounts that may not support EFT functionality reliably. # /GetAccountsSummaryAsync Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-accounts-summary-async GET /v3/{customerId}/BankingServices/GetAccountsSummaryAsync/{requestId} Get pending requests from GetAccountsSummary. Use the `GetAccountsSummaryAsync` endpoint to get pending requests from [/GetAccountsSummary](./get-accounts-summary). To successfully call this endpoint, you must first call the Authorize endpoint to obtain a valid `requestId`. ## Checking if the request is still pending When you receive a 202 HTTPS response from `/GetAccountsSummary` stating that your request is still pending, you must call the `/GetAccountsSummaryAsync` endpoint every 10 seconds to check if the data is finished processing for a maximum of 30 minutes. Your request will likely take a few seconds to process, but setting a 30 minute timeout avoids infinite loops of this request. ## Receiving the data after it's processed You'll get a 200 HTTP response when the data is finished processing. The API delivers the data to you as a JSON payload in a standard format, and your servers can start to handle it in the way that your use case is set up to. # /GetMFAQuestions Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-mfa-questions GET /v3/{customerId}/BankingServices/GetMFAQuestions/{loginId} Retrieve the multi-factor authentication (MFA) questions associated with a user's account. The `/GetMFAQuestions` endpoint retrieves the multi-factor authentication (MFA) questions associated with a user's account. **Availability:** This endpoint is supported only in Canada and only for institutions using simple security questions as their MFA method. **Note:** This endpoint is specific to the Enhanced MFA flow, which preemptively collects simple security question answers to improve Nightly Refresh success. It does not handle advanced MFA types such as two-step verification, push notifications, or other specialized authentication mechanisms. Those are fully supported through Flinks' standard authentication flow via the [/Authorize](/api/authorize/endpoints/authorize) endpoint and [Flinks Connect](/guides/connect/flinks-connect/widget). # /GetNightlyRefreshStatus Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-nightly-refresh-status GET /v3/{customerId}/BankingServices/GetNightlyRefreshStatus Troubleshoot nightly refreshes and see ineligible accounts. Use this endpoint to troubleshoot nightly refreshes that you have already set up using the `/SetScheduledRefresh` endpoint. The `/GetNightlyRefreshStatus` endpoint returns a list of all `LoginIds` that you've enabled nightly refresh for, but are not eligible for refreshes because they don't meet all of the requirements. This endpoint returns a response that details why the account is ineligible. For every account presented in the response, have the user re-link the account through Flinks Connect.

You must authenticate first

Please note that you will need to provide a private Authentication key in order to use this endpoint. If you do not have one already provided, contact your Flinks Representative.
# /GetStatements Source: https://docs.flinks.com/api/connect/endpoints/account-linking/get-statements POST /v3/{customerId}/BankingServices/GetStatements To retrieve PDF statements from a customer's financial institution, use the /GetStatements endpoint. To retrieve PDF statements from a customer's financial institution, use the `/GetStatements` endpoint. You must first call the `/Authorize` endpoint to get a valid `RequestId`.

This endpoint is only available to clients who are based in Canada

If you are based in Canada and want to use this feature, contact your Flinks Representative and we will enable it for you in your private instance.

Add the Flinks Connect parameter to your iframe URL before calling this endpoint

To retrieve statements successfully, you must add the Flinks Connect parameter `detailsAndStatementEnable=true` to your iframe URL.
# Banking Account Linking Source: https://docs.flinks.com/api/connect/endpoints/account-linking/index Use these endpoints to perform actions related to connecting a bank account. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :----------------------------------------------------------------------------------------------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | | [GetAccountsSummary](/api/connect/endpoints/account-linking/get-accounts-summary) | POST | Retrieves general information for linked accounts, including balances, account category, cardholder name (if available), and EFT eligibility. | | [GetAccountsSummaryAsync](/api/connect/endpoints/account-linking/get-accounts-summary-async) | GET | Checks whether a pending GetAccountsSummary request has finished and returns the data once processing is complete. | | [GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail) | POST | Retrieves detailed account information, including personal, contact, and address data, transaction history, and other account details. | | [GetAccountsDetailAsync](/api/connect/endpoints/account-linking/get-accounts-detail-async) | GET | Checks whether a pending GetAccountsDetail request has finished and returns the data once processing is complete. | | [GetStatements](/api/connect/endpoints/account-linking/get-statements) | POST | Signs up specified accounts to retrieve PDF statements from the financial institution (available in Canada only). | | [SetScheduledRefresh](/api/connect/endpoints/account-linking/set-scheduled-refresh) | PATCH | Enables or disables nightly refresh for specific accounts to keep balances and recent transactions up to date. | | [DeleteCard](/api/connect/endpoints/account-linking/delete-card) | DEL | Deletes all data associated with a specific user account or login. | | [AnswerMFAQuestions](/api/connect/endpoints/account-linking/answer-mfa-questions) | PATCH | Submits responses to multi-factor authentication questions required by the institution during account linking. | | [GetMFAQuestions](/api/connect/endpoints/account-linking/get-mfa-questions) | GET | Retrieves the set of MFA questions that must be answered for account authentication. | | [GetNightlyRefreshStatus](/api/connect/endpoints/account-linking/get-nightly-refresh-status) | GET | Returns accounts configured for nightly refresh that are currently ineligible, along with the reason. | | [Institutions](/api/connect/endpoints/account-linking/institutions) | GET | Lists the financial institutions supported by Flinks. | | [Institutions/RoutingNumber](/api/connect/endpoints/account-linking/institutions-routing-number) | GET | Retrieves routing number information for supported U.S. financial institutions. | # /Institutions Source: https://docs.flinks.com/api/connect/endpoints/account-linking/institutions GET /v3/{customerId}/BankingServices/Institutions Retrieve all available institutions and their details. `/Institutions` allows retrieval of all available institutions and their details. This includes identifiers used by both Flinks Connect and Flinks API while handling connections. Each institution can be identified by its `Id`, localized `Name` and `Url`, and it is segmented by `Country`. The response is limited to a maximum of 1000 items, and the parameters `skip`, `take` and API response field `Count` must be used to control iterations. # /Institutions/RoutingNumber Source: https://docs.flinks.com/api/connect/endpoints/account-linking/institutions-routing-number GET /v3/{customerId}/BankingServices/Institutions/RoutingNumber/{routingNumber} Returns the details of the institution corresponding to the routing number. This endpoint returns the details of the institution corresponding to the routing number. This endpoint does not take any query parameters or body parameters.

Keep in mind

The routing numbers are present only for US institutions.
# /SetScheduledRefresh Source: https://docs.flinks.com/api/connect/endpoints/account-linking/set-scheduled-refresh PATCH /v3/{customerId}/BankingServices/SetScheduledRefresh Enable or disable nightly refreshes for a specific account. Nightly refreshes is a feature that's available for customer accounts that are already linked via Flinks Connect. It refreshes account data each night, which provides increased visibility into the accounts that you choose to set this up for. Enable nightly refreshes if you need to see current account balances and most recent transactions. Use the `/SetScheduledRefresh` endpoint to set up nightly refreshes for a specific account. You can also use this endpoint to disable nightly refreshes for a specific account, typically required if the account becomes inactive in your system. If a particular account is not refreshing each night, use the [/GetNightlyRefreshStatus](./get-nightly-refresh-status) endpoint to determine why this is happening. # Accounts Aggregation Source: https://docs.flinks.com/api/connect/getting-started When initiating account connections, a new direct session with the financial institution is established. A successful authorization indicates that the session is ready to begin processing the data you’ve requested. Below are the API endpoints to use if you have a full API integration and need to manage specific data extraction workflows. # Webhooks Source: https://docs.flinks.com/api/connect/webhooks Webhooks are a more efficient way to receive customer data. Another way to receive data is by setting up a webhook endpoint in your backend. Instead of calling the API to receive the JSON with the financial data, Flinks will make a callback to your endpoint with the JSON result of the connected accounts as soon as the data extraction process is complete.

Setting up webhooks in your private instance

For us to configure your private instance with your webhook endpoint address, please open a ticket via [Flinks Support Portal](https://help.flinks.com/support/home). You must provide the name of the **Live** instance where the webhook will be configured. It is not possible to test a webhooks integration using a Sandbox environment.
Flinks currently supports three types of webhooks: * KYC: Anticipates the return of a user's personal information as soon as it is fetched from the financial institution (FI), all the while the accounts' information is still being pulled from the FI. * GetAccountsDetail: Returns this endpoint's payload as a webhook (KYC + IBV + Transactions). **How do I enable webhooks?** It's simple, just send us a webhook URL and we will set everything up on our end. Please make sure to return a 200 whenever you receive a webhook so we can know that everything worked fine. ### Best practices Your server must accept HTTP POST requests and respond to each callback with a code 200. This is so we can have a confirmation that the transmission of the callback was properly completed. The quality of the data should not be treated at this point, unless if the format of the response is invalid. Your server must have a valid [*SSL*](https://cybernews.com/resources/web-hosting-glossary/#ssl-tls) certificate and self-signed certificates are not going to be acceptable for delivery of data. ### Delivery failure All callback delivery failures have a maximum of 10 delivery attempts, with a 30 minutes delay each. Each request has a maximum of 10 delivery attempts All callback requests from Flinks that don't receive an HTTP 200 response backfrom your endpoint will be considered failed. ## Account Linking ### Account Aggregation payload This webhook is an alternative for you to receive the financial data from a `GetAccountsDetail` process. Instead of having to implement an API cached requests flow, you simply need to set up your server to listen to callbacks coming from Flinks. ### Typical usage In a typical integration with Flinks Connect, the `GetAccountsDetail` process is automatically initiated in the background as soon as the user is redirected with the financial institution's confirmation on the authentication. Once all financial data is collected by Flinks, a callback will be sent to your listening server. The delay between the user's redirect in Flinks Connect until the callback will vary according to the amount of information Flinks has to process. ### Payload The callback will contain the same payload you would receive in a successful response for a `GetAccountsDetail` API call. The only addition in this case is the `"ResponseType":"GetAccountsDetail"`, to specify what is the type of callback you a receiving. Example (transactions, balance, and holder abbreviated for simplicity): ```json Json theme={null} { "ResponseType": "GetAccountsDetail", "HttpStatusCode": 200, "Accounts": [ { "Transactions": [...], "TransitNumber": "77777", "InstitutionNumber": "777", "OverdraftLimit": 0, "Title": "Chequing CAD", "AccountNumber": "1111000", "LastFourDigits": null, "Balance": {...}, "Category": "Operations", "Type": "Chequing", "Currency": "CAD", "Holder": {...}, "Email": "biz@flinks.com", "PhoneNumber": "514-123-4567" }, "AccountType": "Business", "Id": "f1f01bee-665a-410e-bcc4-6842315e4a7b" ], "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "InstitutionId": "...", "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` ### Conciliating users The best way to conciliate successfully connected accounts via Flinks Connect to its data is by comparing and conciliating the `LoginId` information from Flinks Connect redirect and the `LoginId` field present in the callback payload. ## KYC The fastest way to receive a user's personal information. ### Quick identity verification The KYC webhook is the quickest way for you to receive the kyc from a user. Specifically, it is useful for use-cases where all financial data is required, but it's time essential to receive the kyc as quickly as possible. The KYC hook can improve the user experience for use-cases that require users to be present during identity verification and data such as transaction history is required for later use once the user is gone. Differently from the `GetAccountsDetail` webhook, the kyc callback is delivered as soon as the user's personal information is processed, without the need for waiting for all `GetAccountsDetail` information to be processed. To activate this feature, please open a ticket via [Flinks Support Portal](https://help.flinks.com/support/home)! ### Payload The payload for this webhook will carry all kyc information directly on the Holders list. You can identify this specific callback by the field `"ResponseType":"KYC"`. ```json Json theme={null} { "ResponseType": "KYC", "HttpStatusCode": 200, "Holders": [ "Name": "Ron Swanson", "Address": { "CivicAddress": "1001 Rue Lenoir Suite A114", "City": "Montreal", "Province": "QC", "PostalCode": "H4C 2Z6", "POBox": null, "Country": "CA" }, "Email": "kyc@flinks.com", "PhoneNumber": "(555)555-555" ], "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-06-21T16:24:16.2076448Z", "Type": "Personal", "Id": "5242ace2-f3b4-4260-1232-08d6f664d244" }, "Institution": "FlinksCapital", "RequestId": "a2e75c5c-55e9-3842-93ad-6c9c9deb4682" } ``` After receiving the kyc callback, you will later receive a `GetAccountsDetail` callback once all the information is processed for the user. You can conciliate all callbacks by tracking the received `LoginId`. # Endpoints Source: https://docs.flinks.com/api/enrich/endpoints Refer to the following table for a list of endpoints related to Enrich products at Flinks. | **SECTION** | **DESCRIPTION** | | :------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Consumer Attributes](./endpoints/consumer-attributes) | Better understand your customers' financial behaviours, verify income, assess lending risk, and enhance decision-making for products like loans, credit, and more. | | [Business Attributes](./endpoints/business-attributes) | Assess expenses, liabilities, overall creditworthiness, and more for business underwriting or financial analysis. | | [Payments Attributes](./endpoints/payment-attributes) | Optimize end-user payments and set up a payment schedule. | | [Attributes Libraries](./endpoints/attributes-libraries) | See all possible attributes you can receive. | # /Categories Source: https://docs.flinks.com/api/enrich/endpoints/attributes-libraries/categories GET /v3/{customerId}/BankingServices/Categories/{CountryCode} The /Categories endpoint returns an up-to-date list of all categories that can be applied to your customers' transactional data in either Canada or the US. Broad Categorization is a service at Flinks that provides financial and behavioural insights by assigning categories to your customers' transactions. The `/Categories` endpoint returns an up-to-date list of all categories that can be applied to your customers' transactional data in either Canada or the US. # /Library (Consumer) Source: https://docs.flinks.com/api/enrich/endpoints/attributes-libraries/consumer GET /v3/{customerId}/attributes/library This endpoint will return a list of all currently available Attributes in our Attributes Library for Consumers. This endpoint will return a list of all currently available Attributes in our Attributes Library for Consumers. # /GetAllBusinessAttributes Source: https://docs.flinks.com/api/enrich/endpoints/business-attributes/get-all-business-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetAllBusinessAttributes This endpoint will provide you with all the currently available Business Attributes. This endpoint will provide you with all the currently available Business Attributes. Please refer to or consult the Quickstart Guide for further information on the use-cases / when to use this specific endpoint.

Note on this Endpoint:

This Endpoint is locked for clients that do not take a Tier 2 or above package.
# /GetBusinessAnalysisAttributes Source: https://docs.flinks.com/api/enrich/endpoints/business-attributes/get-business-analysis-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetBusinessAnalysisAttributes This endpoint will provide you with all Business Analysis Use-Case Attributes. This endpoint will provide you with all Business Analysis Use-Case Attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. # Business Attributes Source: https://docs.flinks.com/api/enrich/endpoints/business-attributes/index Use these endpoints to perform actions related to business attributes. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :---------------------------------------------------------------------------------------------------------- | :--------- | :------------------------------------------------------------------------------- | | [GetBusinessAnalysisAttributes](/api/enrich/endpoints/business-attributes/get-business-analysis-attributes) | GET | Retrieves all business-use case attributes for a given login. | | [GetAllBusinessAttributes](/api/enrich/endpoints/business-attributes/get-all-business-attributes) | GET | Returns all currently available business attributes (locked to Tier 2+ clients). | # /Attributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/attributes POST /v3/{customerId}/insight/login/{loginId}/attributes/{requestId} Use the /Attributes endpoint to tell us the data points in your attributes package you want to retrieve. Use the `/Attributes` endpoint to tell us the data points in your attributes package you want to retrieve. ## Request Parameters | **NAME** | **TYPE** | **DESCRIPTION** | | ---------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | customerId (***mandatory***) | string | GUID representing your customer ID (provided by Flinks). | | loginId (***mandatory***) | string | GUID representing end user's login ID. You get this value after a successful **Authorize** request. | | requestId (***mandatory***) | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | | Attributes (***mandatory***) | object | Lists of desired Attributes broken-down by Attribute level (**card** is currently the only supported attribute level). | | Filters | object | Filters to apply to transactions for which attributes will be calculated. Supported values: **accountCategory**: List of account categories (Operations is currently the only supported value). | | AccountFilter | object | Filters to apply to transactions for which attributes will be calculated, differs from the general Filter parameter above, as this targets specific accounts. Supported values: **AccountID**: List of accountID's to be used in the Attributes calculation (AccountID is taken from the `GetAccountsDetail` response). Multiple accountID's can be used. | | AttributesDetail | object | Acts the same as the `Attributes` parameter, but can be used to return underlying transactions from the Attributes calculation. Include lists of desired Attributes (must also be present at the card level above). Supported values: **AttributesDetail**: List of Attributes that underlying transactions need to be returned from. | | limitDays | object | Optional Parameter to include in the header of any Attributes request that will limit the amount of days of transactions used to calculate **all** Attributes to the days option passed in this parameter. Supports between 1 and 365 days. Supported values: **limitDays**: Any integer value from 1-365 that defines the amount of days of transactions used in the Attributes calculation (Supported on any GET or POST request to Attributes). |

Note on 'Filters' and 'AccountFilter'

The parameter `AccountFilter` can only be used in conjunction with `Filter`. You *must* have both present if you need to filter by specific accounts.

Note on 'AttributesDetail'

Only Attributes that are 'Sum' or 'Count' are allowed here. 'Average' or other types of Attributes are not supported here. Any Attribute name that is included here must also be included in the mandatory `Attributes` parameter above.
## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | Card | object | Object containing an **id** field (end user's LoginId) and all the requested attributes (name: value) | | Login | object | Object representing some end user's technical information such as the LoginId. See **Authorize** endpoint documentation for this object details. | | RequestId | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | | AttributeDetails (Optional) | object | Object containing the fields **TransactionId**, **AccountId**, **Date**, **Description**, **Debit**, **Credit** **per Attribute**. |

Note on Custom Attributes

If you are utilizing the `Attributes Builder` feature to create custom Attributes within the Client Dashboard, then you are able to include your created `Attribute Names` under the `card` object alongside any other pre-created Attributes.
# /GetAllAttributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-all-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetAllAttributes Use the /GetAllAttributes endpoint to return a list of all customer attributes (only available to Flinks clients who take a Tier 2 or above package). Use the `/GetAllAttributes` endpoint to return a list of all customer attributes (only available to Flinks clients who take a Tier 2 or above package). To successfully call this endpoint, you must first call the `/Authorize` endpoint to obtain a valid `requestId`. ## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | Card | object | Object containing an **id** field (end user's LoginId) and all the requested attributes (name: value) | | Login | object | Object representing some end user's technical information such as the LoginId. See **Authorize** endpoint documentation for this object details. | | RequestId | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | | AttributesDetails | object | Object containing the fields **TransactionId**, **AccountId**, **Date**, **Description**, **Debit**, and **Credit per Attribute**. |

You may receive NONE\_DETECTED in the response

If your response contains the `NONE_DETECTED` field, we did not find any transactions in that category in the account history and, therefore, do not have any data to return. All attributes will return the `NONE_DETECTED` field if no data is available.
# /GetCategorization Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-categorization GET /v3/{customerId}/categorization/login/{loginId}/requestid/{requestId} Returns categorized transactional data. This data is aggregated by Flinks through the /GetAccountsDetail endpoint. Broad Categorization is a service at Flinks that provides financial and behavioural insights by assigning categories to your customers' transactions. The `/GetCategorization` endpoint is used by the Broad Categorization service and returns categorized transactional data. This data is aggregated by Flinks through the `/GetAccountsDetail` endpoint for the customer whose `loginId` is passed in the path parameter. # /GetCreditRiskAttributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-credit-risk-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetCreditRiskAttributes This endpoint will provide you with all Credit Risk Use-Case Attributes. This endpoint will provide you with all Credit Risk Use-Case Attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. ## Rquest Parameters | **NAME** | **TYPE** | **DESCRIPTION** | | ---------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- | | customerId (***mandatory***) | string | GUID representing your customer ID (provided by Flinks). | | loginId (***mandatory***) | string | GUID representing end user's login ID. You get this value after a successful **Authorize** request. | | requestId (***mandatory***) | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | ## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | Card | object | Object containing an **id** field (end user's LoginId) and all the requested attributes (name: value) | | Login | object | Object representing some end user's technical information such as the LoginId. See **Authorize** endpoint documentation for this object details. | | RequestId | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | | AttributesDetails | object | Object containing the fields **TransactionId**, **AccountId**, **Date**, **Description**, **Debit**, and **Credit per Attribute**. | # /GetIncomeAttributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-income-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetIncomeAttributes This endpoint will provide you with all Income use-case Attributes. This endpoint will provide you with all Income use-case Attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. ## Request Parameters | **NAME** | **TYPE** | **DESCRIPTION** | | :------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------ | | customerId (**mandatory**) | string | GUID representing your customer ID (provided by Flinks). | | loginId (**mandatory**) | string | GUID representing the end user's login ID. You get this value after a successful **Authorize** request. | | requestId (**mandatory**) | string | GUID representing an authorized request to the API. You get this endpoint after a successful **Authorize** request. | ## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | :--------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | | Card | object | Object containing an id field (end user's LoginId) and all the requested attributes (name: value). | | Login | object | Object representing some end user's technical information such as the LoginId. See **Authorize** endpoint documentation for this object details. | | RequestId | string | GUID representing an authorized request to the API. You get this value after a successful **Authorize** request. | | AttributeDetails | object | Object containing the fields **TransactionId**, **AccountId**, **Date**, **Description**, **Debit**, and **Credit per Attribute**. | # /GetLendingAttributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-lending-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetLendingAttributes This endpoint will provide you with all Lending Use-Case Attributes. This endpoint will provide you with all Lending Use-Case Attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. # /GetUserAnalysisAttributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/get-user-analysis-attributes GET /v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetUserAnalysisAttributes This endpoint will provide you with all Credit Risk use-case attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. This endpoint will provide you with all Credit Risk use-case attributes. Please refer to our Quickstart guide for further information on the use-cases / when to use this specific endpoint. ## Request Parameters | **NAME** | **TYPE** | **DESCRIPTION** | | :--------- | :------- | :----------------------------------------------------------------------------------------------------------- | | customerId | string | GUID representing your customer ID (provided by Flinks) | | loginId | string | GUID representing end user's login ID. You get this value after a successful Authorize request. | | requestId | string | GUID representing an authorized request to the API. You get this value after a successful Authorize request. | ## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | :--------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | | Card | object | Object containing an id field (the end user's loginId) and all the requested attributes (name: value) | | Login | object | Object representing some end user's technical information such as the loginId. See Authorize endpoint documentation for this object's details. | | RequestId | string | GUID representing an authorized request to the API. You get this value after a successful Authorize request. | | AttributeDetails | object | Objects containing the fields: TransactionId, AccountId, Date, Description, Debit, and Credit per Attribute. | # Consumer Attributes Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/index Use these endpoints to perform actions related to consumer attributes. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :-------------------------------------------------------------------------------------------------- | :--------- | :--------------------------------------------------------------------------------------- | | [GetUserAnalysisAttributes](/api/enrich/endpoints/consumer-attributes/get-user-analysis-attributes) | GET | Returns all credit-risk use-case attributes for a given user login. | | [GetLendingAttributes](/api/enrich/endpoints/consumer-attributes/get-lending-attributes) | GET | Retrieves all lending use-case attributes for a user login. | | [GetIncomeAttributes](/api/enrich/endpoints/consumer-attributes/get-income-attributes) | GET | Provides income use-case attributes for a user login. | | [GetCreditRiskAttributes](/api/enrich/endpoints/consumer-attributes/get-credit-risk-attributes) | GET | Fetches credit-risk attributes associated with a user login. | | [GetAllAttributes](/api/enrich/endpoints/consumer-attributes/get-all-attributes) | GET | Returns a complete list of all available customer attributes (Tier 2+ access required). | | [Attributes](/api/enrich/endpoints/consumer-attributes/attributes) | POST | Requests specific attribute data points by specifying the attributes to retrieve. | | [GetCategorization](/api/enrich/endpoints/consumer-attributes/get-categorization) | GET | Returns categorized transaction data for a user based on aggregated account information. | # Response Parameters Source: https://docs.flinks.com/api/enrich/endpoints/consumer-attributes/response-parameters Details of the response parameters for Consumer Attributes endpoints. For a list of all response parameters for the following Attributes endpoints, toggle the tabs below. The following response parameters are under the Card object in a 200 response of the GetUserAnalysisAttributes endpoint. | **PARAMETER** | **TYPE** | DEFAULT VALUE\*\* | | :------------------------------------------------------- | :------- | :---------------- | | Id | string | | | AttributesDetail | array | | | auto\_loan\_deposits\_frequency\_biz | string | | | auto\_loan\_deposits\_trend\_biz | number | Defaults to 0 | | auto\_loan\_deposits\_trend\_simple\_biz | string | | | average\_auto\_loan\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_auto\_loan\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_auto\_loan\_deposits\_biz | string | | | count\_auto\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | auto\_loan\_payments\_frequency\_biz | string | | | auto\_loan\_payments\_trend\_biz | number | Defaults to 0 | | auto\_loan\_payments\_trend\_simple\_biz | string | | | average\_auto\_loan\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_auto\_loan\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_auto\_loan\_payments\_biz | string | | | count\_auto\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_auto\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_auto\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | bank\_fees\_frequency\_biz | string | | | bank\_fees\_trend\_biz | number | Defaults to 0 | | bank\_fees\_trend\_simple\_biz | string | | | average\_bank\_fees\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_bank\_fees\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_bank\_fees\_biz | string | | | count\_bank\_fees\_current\_month\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_current\_month\_biz | integer | Defaults to 0 | | count\_bank\_fees\_previous\_month\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_previous\_month\_biz | integer | Defaults to 0 | | count\_bank\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_bank\_fees\_30\_days\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_30\_days\_biz | integer | Defaults to 0 | | count\_bank\_fees\_60\_days\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_60\_days\_biz | integer | Defaults to 0 | | count\_bank\_fees\_90\_days\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_90\_days\_biz | integer | Defaults to 0 | | count\_bank\_fees\_180\_days\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_180\_days\_biz | integer | Defaults to 0 | | count\_bank\_fees\_365\_days\_biz | integer | Defaults to 0 | | sum\_bank\_fees\_365\_days\_biz | integer | Defaults to 0 | | branch\_deposits\_frequency\_biz | string | | | branch\_deposits\_trend\_biz | number | Defaults to 0 | | branch\_deposits\_trend\_simple\_biz | string | | | average\_branch\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_branch\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_branch\_deposits\_biz | string | | | count\_branch\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_branch\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_branch\_deposits\_365\_days\_biz | integer | Defaults to 0 | | loan\_business\_deposits\_frequency\_biz | string | | | loan\_business\_deposits\_trend\_biz | number | Defaults to 0 | | loan\_business\_deposits\_trend\_simple\_biz | string | | | average\_loan\_business\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_loan\_business\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_loan\_business\_deposits\_biz | string | | | count\_loan\_business\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_loan\_business\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_loan\_business\_deposits\_365\_days\_biz | integer | Defaults to 0 | | business\_loan\_payments\_frequency\_biz | string | | | business\_loan\_payments\_trend\_biz | number | Defaults to 0 | | business\_loan\_payments\_trend\_simple\_biz | string | | | average\_business\_loan\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_business\_loan\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_business\_loan\_payments\_biz | string | | | count\_business\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_business\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_business\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | cash\_withdrawals\_frequency\_biz | string | | | cash\_withdrawals\_trend\_biz | number | Defaults to 0 | | cash\_withdrawals\_trend\_simple\_biz | string | | | average\_cash\_withdrawals\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_cash\_withdrawals\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_cash\_withdrawals\_biz | string | | | count\_cash\_withdrawals\_current\_month\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_current\_month\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_previous\_month\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_previous\_month\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_30\_days\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_30\_days\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_60\_days\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_60\_days\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_90\_days\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_90\_days\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_180\_days\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_180\_days\_biz | integer | Defaults to 0 | | count\_cash\_withdrawals\_365\_days\_biz | integer | Defaults to 0 | | sum\_cash\_withdrawals\_365\_days\_biz | integer | Defaults to 0 | | credit\_card\_deposits\_frequency\_biz | string | | | credit\_card\_deposits\_trend\_biz | number | Defaults to 0 | | credit\_card\_deposits\_trend\_simple\_biz | string | | | average\_credit\_card\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_credit\_card\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_credit\_card\_deposits\_biz | string | | | count\_credit\_card\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_deposits\_365\_days\_biz | integer | Defaults to 0 | | credit\_card\_expenses\_frequency\_biz | string | | | credit\_card\_expenses\_trend\_biz | number | Defaults to 0 | | credit\_card\_expenses\_trend\_simple\_biz | string | | | average\_credit\_card\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_credit\_card\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_credit\_card\_expenses\_biz | string | | | count\_credit\_card\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_credit\_card\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_credit\_card\_expenses\_365\_days\_biz | integer | Defaults to 0 | | fees\_frequency\_biz | string | | | fees\_trend\_biz | number | Defaults to 0 | | fees\_trend\_simple\_biz | string | | | average\_fees\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_fees\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_fees\_biz | string | | | count\_fees\_current\_month\_biz | integer | Defaults to 0 | | sum\_fees\_current\_month\_biz | integer | Defaults to 0 | | count\_fees\_previous\_month\_biz | integer | Defaults to 0 | | sum\_fees\_previous\_month\_biz | integer | Defaults to 0 | | count\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_fees\_30\_days\_biz | integer | Defaults to 0 | | sum\_fees\_30\_days\_biz | integer | Defaults to 0 | | count\_fees\_60\_days\_biz | integer | Defaults to 0 | | sum\_fees\_60\_days\_biz | integer | Defaults to 0 | | count\_fees\_90\_days\_biz | integer | Defaults to 0 | | sum\_fees\_90\_days\_biz | integer | Defaults to 0 | | count\_fees\_180\_days\_biz | integer | Defaults to 0 | | sum\_fees\_180\_days\_biz | integer | Defaults to 0 | | count\_fees\_365\_days\_biz | integer | Defaults to 0 | | sum\_fees\_365\_days\_biz | integer | Defaults to 0 | | government\_income\_frequency\_biz | string | | | government\_income\_trend\_biz | number | Defaults to 0 | | government\_income\_trend\_simple\_biz | string | | | average\_government\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_government\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_government\_income\_biz | string | | | count\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | insurance\_deposit\_frequency\_biz | string | | | insurance\_deposit\_trend\_biz | number | Defaults to 0 | | insurance\_deposit\_trend\_simple\_biz | string | | | average\_insurance\_deposit\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_insurance\_deposit\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_insurance\_deposit\_biz | string | | | count\_insurance\_deposit\_current\_month\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_current\_month\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_30\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_30\_days\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_60\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_60\_days\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_90\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_90\_days\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_180\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_180\_days\_biz | integer | Defaults to 0 | | count\_insurance\_deposit\_365\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_deposit\_365\_days\_biz | integer | Defaults to 0 | | insurance\_payments\_frequency\_biz | string | | | insurance\_payments\_trend\_biz | number | Defaults to 0 | | insurance\_payments\_trend\_simple\_biz | string | | | average\_insurance\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_insurance\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_insurance\_payments\_biz | string | | | count\_insurance\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_insurance\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_insurance\_payments\_365\_days\_biz | integer | Defaults to 0 | | liabilities\_frequency\_biz | string | | | liabilities\_trend\_biz | number | Defaults to 0 | | liabilities\_trend\_simple\_biz | string | | | average\_liabilities\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_liabilities\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_liabilities\_biz | string | | | count\_liabilities\_current\_month\_biz | integer | Defaults to 0 | | sum\_liabilities\_current\_month\_biz | integer | Defaults to 0 | | count\_liabilities\_previous\_month\_biz | integer | Defaults to 0 | | sum\_liabilities\_previous\_month\_biz | integer | Defaults to 0 | | count\_liabilities\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_liabilities\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_liabilities\_30\_days\_biz | integer | Defaults to 0 | | sum\_liabilities\_30\_days\_biz | integer | Defaults to 0 | | count\_liabilities\_60\_days\_biz | integer | Defaults to 0 | | sum\_liabilities\_60\_days\_biz | integer | Defaults to 0 | | count\_liabilities\_90\_days\_biz | integer | Defaults to 0 | | sum\_liabilities\_90\_days\_biz | integer | Defaults to 0 | | count\_liabilities\_180\_days\_biz | integer | Defaults to 0 | | sum\_liabilities\_180\_days\_biz | integer | Defaults to 0 | | count\_liabilities\_365\_days\_biz | integer | Defaults to 0 | | sum\_liabilities\_365\_days\_biz | integer | Defaults to 0 | | mortgage\_deposits\_frequency\_biz | string | | | mortgage\_deposits\_trend\_biz | number | Defaults to 0 | | mortgage\_deposits\_trend\_simple\_biz | string | | | average\_mortgage\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_mortgage\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_mortgage\_deposits\_biz | string | | | count\_mortgage\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_deposits\_365\_days\_biz | integer | Defaults to 0 | | mortgage\_loan\_payments\_frequency\_biz | string | | | mortgage\_loan\_payments\_trend\_biz | number | Defaults to 0 | | mortgage\_loan\_payments\_trend\_simple\_biz | string | | | average\_mortgage\_loan\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_mortgage\_loan\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_mortgage\_loan\_payments\_biz | string | | | count\_mortgage\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_mortgage\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_mortgage\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | msp\_deposits\_frequency\_biz | string | | | msp\_deposits\_trend\_biz | number | Defaults to 0 | | msp\_deposits\_trend\_simple\_biz | string | | | average\_msp\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_msp\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_msp\_deposits\_biz | string | | | count\_msp\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_msp\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_msp\_deposits\_365\_days\_biz | integer | Defaults to 0 | | nsf\_fees\_frequency\_biz | string | | | nsf\_fees\_trend\_biz | number | Defaults to 0 | | nsf\_fees\_trend\_simple\_biz | string | | | average\_nsf\_fees\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_nsf\_fees\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_nsf\_fees\_biz | string | | | count\_nsf\_fees\_current\_month\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_current\_month\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_previous\_month\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_previous\_month\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_30\_days\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_30\_days\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_60\_days\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_60\_days\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_90\_days\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_90\_days\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_180\_days\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_180\_days\_biz | integer | Defaults to 0 | | count\_nsf\_fees\_365\_days\_biz | integer | Defaults to 0 | | sum\_nsf\_fees\_365\_days\_biz | integer | Defaults to 0 | | operating\_expenses\_frequency\_biz | string | | | operating\_expenses\_trend\_biz | number | Defaults to 0 | | operating\_expenses\_trend\_simple\_biz | string | | | average\_operating\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_operating\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_operating\_expenses\_biz | string | | | count\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | operating\_income\_frequency\_biz | string | | | operating\_income\_trend\_biz | number | Defaults to 0 | | operating\_income\_trend\_simple\_biz | string | | | average\_operating\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_operating\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_operating\_income\_biz | string | | | count\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | other\_expenses\_frequency\_biz | string | | | other\_expenses\_trend\_biz | number | Defaults to 0 | | other\_expenses\_trend\_simple\_biz | string | | | average\_other\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_expenses\_biz | string | | | count\_other\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_expenses\_365\_days\_biz | integer | Defaults to 0 | | other\_fees\_frequency\_biz | string | | | other\_fees\_trend\_biz | number | Defaults to 0 | | other\_fees\_trend\_simple\_biz | string | | | average\_other\_fees\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_fees\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_fees\_biz | string | | | count\_other\_fees\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_fees\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_fees\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_fees\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_fees\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_fees\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_fees\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_fees\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_fees\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_fees\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_fees\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_fees\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_fees\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_fees\_365\_days\_biz | integer | Defaults to 0 | | other\_government\_income\_frequency\_biz | string | | | other\_government\_income\_trend\_biz | number | Defaults to 0 | | other\_government\_income\_trend\_simple\_biz | string | | | average\_other\_government\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_government\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_government\_income\_biz | string | | | count\_other\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | other\_income\_frequency\_biz | string | | | other\_income\_trend\_biz | number | Defaults to 0 | | other\_income\_trend\_simple\_biz | string | | | average\_other\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_income\_biz | string | | | count\_other\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_income\_365\_days\_biz | integer | Defaults to 0 | | other\_loan\_deposits\_frequency\_biz | string | | | other\_loan\_deposits\_trend\_biz | number | Defaults to 0 | | other\_loan\_deposits\_trend\_simple\_biz | string | | | average\_other\_loan\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_loan\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_loan\_deposits\_biz | string | | | count\_other\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | other\_loan\_payments\_frequency\_biz | string | | | other\_loan\_payments\_trend\_biz | number | Defaults to 0 | | other\_loan\_payments\_trend\_simple\_biz | string | | | average\_other\_loan\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_loan\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_loan\_payments\_biz | string | | | count\_other\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | other\_operating\_expenses\_frequency\_biz | string | | | other\_operating\_expenses\_trend\_biz | number | Defaults to 0 | | other\_operating\_expenses\_trend\_simple\_biz | string | | | average\_other\_operating\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_operating\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_operating\_expenses\_biz | string | | | count\_other\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | other\_operating\_income\_frequency\_biz | string | | | other\_operating\_income\_trend\_biz | number | Defaults to 0 | | other\_operating\_income\_trend\_simple\_biz | string | | | average\_other\_operating\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_operating\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_operating\_income\_biz | string | | | count\_other\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | other\_types\_of\_income\_frequency\_biz | string | | | other\_types\_of\_income\_trend\_biz | number | Defaults to 0 | | other\_types\_of\_income\_trend\_simple\_biz | string | | | average\_other\_types\_of\_income\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_types\_of\_income\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_types\_of\_income\_biz | string | | | count\_other\_types\_of\_income\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_types\_of\_income\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_types\_of\_income\_365\_days\_biz | integer | Defaults to 0 | | other\_vendor\_deposits\_frequency\_biz | string | | | other\_vendor\_deposits\_trend\_biz | number | Defaults to 0 | | other\_vendor\_deposits\_trend\_simple\_biz | string | | | average\_other\_vendor\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_other\_vendor\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_other\_vendor\_deposits\_biz | string | | | count\_other\_vendor\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_other\_vendor\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_other\_vendor\_deposits\_365\_days\_biz | integer | Defaults to 0 | | payroll\_deposits\_frequency\_biz | string | | | payroll\_deposits\_trend\_biz | number | Defaults to 0 | | payroll\_deposits\_trend\_simple\_biz | string | | | average\_payroll\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_payroll\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_payroll\_deposits\_biz | string | | | count\_payroll\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_payroll\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_deposits\_365\_days\_biz | integer | Defaults to 0 | | payroll\_expenses\_frequency\_biz | string | | | payroll\_expenses\_trend\_biz | number | Defaults to 0 | | payroll\_expenses\_trend\_simple\_biz | string | | | average\_payroll\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_payroll\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_payroll\_expenses\_biz | string | | | count\_payroll\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_payroll\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_payroll\_expenses\_365\_days\_biz | integer | Defaults to 0 | | rent\_deposit\_frequency\_biz | string | | | rent\_deposit\_trend\_biz | number | Defaults to 0 | | rent\_deposit\_trend\_simple\_biz | string | | | average\_rent\_deposit\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_rent\_deposit\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_rent\_deposit\_biz | string | | | count\_rent\_deposit\_current\_month\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_current\_month\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_30\_days\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_30\_days\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_60\_days\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_60\_days\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_90\_days\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_90\_days\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_180\_days\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_180\_days\_biz | integer | Defaults to 0 | | count\_rent\_deposit\_365\_days\_biz | integer | Defaults to 0 | | sum\_rent\_deposit\_365\_days\_biz | integer | Defaults to 0 | | rent\_payments\_frequency\_biz | string | | | rent\_payments\_trend\_biz | number | Defaults to 0 | | rent\_payments\_trend\_simple\_biz | string | | | average\_rent\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_rent\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_rent\_payments\_biz | string | | | count\_rent\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_rent\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_rent\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_rent\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_rent\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_rent\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_rent\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_rent\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_rent\_payments\_365\_days\_biz | integer | Defaults to 0 | | reversals\_frequency\_biz | string | | | reversals\_trend\_biz | number | Defaults to 0 | | reversals\_trend\_simple\_biz | string | | | average\_reversals\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_reversals\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_reversals\_biz | string | | | count\_reversals\_current\_month\_biz | integer | Defaults to 0 | | sum\_reversals\_current\_month\_biz | integer | Defaults to 0 | | count\_reversals\_previous\_month\_biz | integer | Defaults to 0 | | sum\_reversals\_previous\_month\_biz | integer | Defaults to 0 | | count\_reversals\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_reversals\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_reversals\_30\_days\_biz | integer | Defaults to 0 | | sum\_reversals\_30\_days\_biz | integer | Defaults to 0 | | count\_reversals\_60\_days\_biz | integer | Defaults to 0 | | sum\_reversals\_60\_days\_biz | integer | Defaults to 0 | | count\_reversals\_90\_days\_biz | integer | Defaults to 0 | | sum\_reversals\_90\_days\_biz | integer | Defaults to 0 | | count\_reversals\_180\_days\_biz | integer | Defaults to 0 | | sum\_reversals\_180\_days\_biz | integer | Defaults to 0 | | count\_reversals\_365\_days\_biz | integer | Defaults to 0 | | sum\_reversals\_365\_days\_biz | integer | Defaults to 0 | | tax\_refund\_frequency\_biz | string | | | tax\_refund\_trend\_biz | number | Defaults to 0 | | tax\_refund\_trend\_simple\_biz | string | | | average\_tax\_refund\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_tax\_refund\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_tax\_refund\_biz | string | | | count\_tax\_refund\_current\_month\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_current\_month\_biz | integer | Defaults to 0 | | count\_tax\_refund\_previous\_month\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_previous\_month\_biz | integer | Defaults to 0 | | count\_tax\_refund\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_tax\_refund\_30\_days\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_30\_days\_biz | integer | Defaults to 0 | | count\_tax\_refund\_60\_days\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_60\_days\_biz | integer | Defaults to 0 | | count\_tax\_refund\_90\_days\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_90\_days\_biz | integer | Defaults to 0 | | count\_tax\_refund\_180\_days\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_180\_days\_biz | integer | Defaults to 0 | | count\_tax\_refund\_365\_days\_biz | integer | Defaults to 0 | | sum\_tax\_refund\_365\_days\_biz | integer | Defaults to 0 | | telecom\_payments\_frequency\_biz | string | | | telecom\_payments\_trend\_biz | number | Defaults to 0 | | telecom\_payments\_trend\_simple\_biz | string | | | average\_telecom\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_telecom\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_telecom\_payments\_biz | string | | | count\_telecom\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_telecom\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_telecom\_payments\_365\_days\_biz | integer | Defaults to 0 | | transfer\_deposits\_frequency\_biz | string | | | transfer\_deposits\_trend\_biz | number | Defaults to 0 | | transfer\_deposits\_trend\_simple\_biz | string | | | average\_transfer\_deposits\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_transfer\_deposits\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_transfer\_deposits\_biz | string | | | count\_transfer\_deposits\_current\_month\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_current\_month\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_30\_days\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_30\_days\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_60\_days\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_60\_days\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_90\_days\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_90\_days\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_180\_days\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_180\_days\_biz | integer | Defaults to 0 | | count\_transfer\_deposits\_365\_days\_biz | integer | Defaults to 0 | | sum\_transfer\_deposits\_365\_days\_biz | integer | Defaults to 0 | | utility\_payments\_frequency\_biz | string | | | utility\_payments\_trend\_biz | number | Defaults to 0 | | utility\_payments\_trend\_simple\_biz | string | | | average\_utility\_payments\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_utility\_payments\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_utility\_payments\_biz | string | | | count\_utility\_payments\_current\_month\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_current\_month\_biz | integer | Defaults to 0 | | count\_utility\_payments\_previous\_month\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_previous\_month\_biz | integer | Defaults to 0 | | count\_utility\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_utility\_payments\_30\_days\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_30\_days\_biz | integer | Defaults to 0 | | count\_utility\_payments\_60\_days\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_60\_days\_biz | integer | Defaults to 0 | | count\_utility\_payments\_90\_days\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_90\_days\_biz | integer | Defaults to 0 | | count\_utility\_payments\_180\_days\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_180\_days\_biz | integer | Defaults to 0 | | count\_utility\_payments\_365\_days\_biz | integer | Defaults to 0 | | sum\_utility\_payments\_365\_days\_biz | integer | Defaults to 0 | | vendor\_expenses\_frequency\_biz | string | | | vendor\_expenses\_trend\_biz | number | Defaults to 0 | | vendor\_expenses\_trend\_simple\_biz | string | | | average\_vendor\_expenses\_deposit\_biz | integer | Defaults to 0 | | average\_monthly\_vendor\_expenses\_biz | number | Defaults to 0 | | last\_2\_deposit\_dates\_vendor\_expenses\_biz | string | | | count\_vendor\_expenses\_current\_month\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_current\_month\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_30\_days\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_30\_days\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_60\_days\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_60\_days\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_90\_days\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_90\_days\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_180\_days\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_180\_days\_biz | integer | Defaults to 0 | | count\_vendor\_expenses\_365\_days\_biz | integer | Defaults to 0 | | sum\_vendor\_expenses\_365\_days\_biz | integer | Defaults to 0 | Attributes focused on lending and credit risk assessment. ### Response Parameters | **PARAMETER** | **TYPE** | **DEFAULT** | | | :--------------------------------------------------- | :------- | :------------ | - | | active\_days\_trend\_simple | string | | | | sum\_total\_income | integer | Defaults to 0 | | | AttributesDetail | array | | | | pension\_income\_frequency | string | | | | sum\_pension\_income\_current\_month | integer | Defaults to 0 | | | sum\_pension\_income\_previous\_month | integer | Defaults to 0 | | | sum\_pension\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_pension\_income\_30\_days | integer | Defaults to 0 | | | sum\_pension\_income\_60\_days | integer | Defaults to 0 | | | sum\_pension\_income\_90\_days | integer | Defaults to 0 | | | sum\_pension\_income\_180\_days | integer | Defaults to 0 | | | sum\_pension\_income\_365\_days | integer | Defaults to 0 | | | social\_assistance\_income\_frequency | string | | | | sum\_social\_assistance\_income\_current\_month | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_previous\_month | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_30\_days | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_60\_days | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_90\_days | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_180\_days | integer | Defaults to 0 | | | sum\_social\_assistance\_income\_365\_days | integer | Defaults to 0 | | | student\_loan\_payments\_frequency | string | | | | sum\_student\_loan\_payments\_current\_month | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_previous\_month | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_2\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_3\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_4\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_5\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_6\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_7\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_8\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_9\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_10\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_11\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_12\_months\_ago | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_30\_days | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_60\_days | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_90\_days | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_180\_days | integer | Defaults to 0 | | | sum\_student\_loan\_payments\_365\_days | integer | Defaults to 0 | | | telecom\_payments\_frequency | string | | | | sum\_telecom\_payments\_current\_month | integer | Defaults to 0 | | | sum\_telecom\_payments\_previous\_month | integer | Defaults to 0 | | | sum\_telecom\_payments\_2\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_3\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_4\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_5\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_6\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_7\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_8\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_9\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_10\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_11\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_12\_months\_ago | integer | Defaults to 0 | | | sum\_telecom\_payments\_30\_days | integer | Defaults to 0 | | | sum\_telecom\_payments\_60\_days | integer | Defaults to 0 | | | sum\_telecom\_payments\_90\_days | integer | Defaults to 0 | | | sum\_telecom\_payments\_180\_days | integer | Defaults to 0 | | | sum\_telecom\_payments\_365\_days | integer | Defaults to 0 | | | total\_income\_frequency | string | | | | sum\_total\_income\_current\_month | integer | Defaults to 0 | | | sum\_total\_income\_previous\_month | integer | Defaults to 0 | | | sum\_total\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_total\_income\_30\_days | integer | Defaults to 0 | | | sum\_total\_income\_60\_days | integer | Defaults to 0 | | | sum\_total\_income\_90\_days | integer | Defaults to 0 | | | sum\_total\_income\_180\_days | integer | Defaults to 0 | | | sum\_total\_income\_365\_days | integer | Defaults to 0 | | | utility\_payments\_frequency | string | | | | sum\_utility\_payments\_current\_month | integer | Defaults to 0 | | | sum\_utility\_payments\_previous\_month | integer | Defaults to 0 | | | sum\_utility\_payments\_2\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_3\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_4\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_5\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_6\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_7\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_8\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_9\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_10\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_11\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_12\_months\_ago | integer | Defaults to 0 | | | sum\_utility\_payments\_30\_days | integer | Defaults to 0 | | | sum\_utility\_payments\_60\_days | integer | Defaults to 0 | | | sum\_utility\_payments\_90\_days | integer | Defaults to 0 | | | sum\_utility\_payments\_180\_days | integer | Defaults to 0 | | | sum\_utility\_payments\_365\_days | integer | Defaults to 0 | | | wsib\_income\_frequency | string | | | | sum\_wsib\_income\_current\_month | integer | Defaults to 0 | | | sum\_wsib\_income\_previous\_month | integer | Defaults to 0 | | | sum\_wsib\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_wsib\_income\_30\_days | integer | Defaults to 0 | | | sum\_wsib\_income\_60\_days | integer | Defaults to 0 | | | sum\_wsib\_income\_90\_days | integer | Defaults to 0 | | | sum\_wsib\_income\_180\_days | integer | Defaults to 0 | | | sum\_wsib\_income\_365\_days | integer | Defaults to 0 | | | disability\_income\_frequency | string | | | | sum\_disability\_income\_current\_month | integer | Defaults to 0 | | | sum\_disability\_income\_previous\_month | integer | Defaults to 0 | | | sum\_disability\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_disability\_income\_30\_days | integer | Defaults to 0 | | | sum\_disability\_income\_60\_days | integer | Defaults to 0 | | | sum\_disability\_income\_90\_days | integer | Defaults to 0 | | | sum\_disability\_income\_180\_days | integer | Defaults to 0 | | | sum\_disability\_income\_365\_days | integer | Defaults to 0 | | | employment\_insurance\_income\_frequency | string | | | | sum\_employment\_insurance\_income\_current\_month | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_previous\_month | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_2\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_3\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_4\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_5\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_6\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_7\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_8\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_9\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_10\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_11\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_12\_months\_ago | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_30\_days | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_60\_days | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_90\_days | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_180\_days | integer | Defaults to 0 | | | sum\_employment\_insurance\_income\_365\_days | integer | Defaults to 0 | | | mortgage\_frequency | string | | | | sum\_mortgage\_current\_month | integer | Defaults to 0 | | | sum\_mortgage\_previous\_month | integer | Defaults to 0 | | | sum\_mortgage\_2\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_3\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_4\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_5\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_6\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_7\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_8\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_9\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_10\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_11\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_12\_months\_ago | integer | Defaults to 0 | | | sum\_mortgage\_30\_days | integer | Defaults to 0 | | | sum\_mortgage\_60\_days | integer | Defaults to 0 | | | sum\_mortgage\_90\_days | integer | Defaults to 0 | | | sum\_mortgage\_180\_days | integer | Defaults to 0 | | | sum\_mortgage\_365\_days | integer | Defaults to 0 | | | auto\_loan\_payment\_average | integer | Defaults to 0 | | | average\_child\_support\_income\_government\_deposit | integer | Defaults to 0 | | | student\_loan\_payments\_average | integer | Defaults to 0 | | | mortgage\_payments\_average | integer | Defaults to 0 | | Attributes for deep business analysis. ### Response Parameters | **PARAMETER** | **TYPE** | **DEFAULT** | | | :--------------------------------------------------------- | :------- | :------------ | - | | Id | string | | | | AttributesDetail | array | | | | average\_monthly\_operating\_income\_complex\_biz | integer | Defaults to 0 | | | operating\_income\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_operating\_income\_biz | string | | | | average\_operating\_income\_deposit\_biz | number | Defaults to 0 | | | operating\_income\_trend\_simple\_biz | string | | | | sum\_operating\_income\_biz | integer | Defaults to 0 | | | count\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_current\_month\_biz | integer | Defaults to 0 | | | count\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_previous\_month\_biz | integer | Defaults to 0 | | | count\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_30\_days\_biz | integer | Defaults to 0 | | | count\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_60\_days\_biz | integer | Defaults to 0 | | | count\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_90\_days\_biz | integer | Defaults to 0 | | | count\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_180\_days\_biz | integer | Defaults to 0 | | | count\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_income\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_msp\_deposits\_complex\_biz | integer | Defaults to 0 | | | msp\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_msp\_deposits\_biz | string | | | | average\_msp\_deposits\_deposit\_biz | number | Defaults to 0 | | | msp\_deposits\_trend\_simple\_biz | string | | | | sum\_msp\_deposits\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_msp\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_msp\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_transfer\_deposits\_complex\_biz | integer | Defaults to 0 | | | transfer\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_transfer\_deposits\_biz | string | | | | average\_transfer\_deposits\_deposit\_biz | number | Defaults to 0 | | | transfer\_deposits\_trend\_simple\_biz | string | | | | sum\_transfer\_deposits\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_transfer\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_transfer\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_branch\_deposits\_complex\_biz | integer | Defaults to 0 | | | branch\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_branch\_deposits\_biz | string | | | | average\_branch\_deposits\_deposit\_biz | number | Defaults to 0 | | | branch\_deposits\_trend\_simple\_biz | string | | | | sum\_branch\_deposits\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_branch\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_branch\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_payroll\_deposits\_complex\_biz | integer | Defaults to 0 | | | payroll\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_payroll\_deposits\_biz | string | | | | average\_payroll\_deposits\_deposit\_biz | number | Defaults to 0 | | | payroll\_deposits\_trend\_simple\_biz | string | | | | sum\_payroll\_deposits\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_government\_income\_complex\_biz | integer | Defaults to 0 | | | government\_income\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_government\_income\_biz | string | | | | average\_government\_income\_deposit\_biz | number | Defaults to 0 | | | government\_income\_trend\_simple\_biz | string | | | | sum\_government\_income\_biz | integer | Defaults to 0 | | | count\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | | sum\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | | count\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | | count\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | | sum\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | | count\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | | sum\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | | count\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | | sum\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | | count\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | | sum\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | | count\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | | sum\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_tax\_refund\_complex\_biz | integer | Defaults to 0 | | | tax\_refund\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_tax\_refund\_biz | string | | | | average\_tax\_refund\_deposit\_biz | number | Defaults to 0 | | | tax\_refund\_trend\_simple\_biz | string | | | | sum\_tax\_refund\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_current\_month\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_current\_month\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_previous\_month\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_30\_days\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_30\_days\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_60\_days\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_60\_days\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_90\_days\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_90\_days\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_180\_days\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_180\_days\_biz | integer | Defaults to 0 | | | count\_tax\_refund\_365\_days\_biz | integer | Defaults to 0 | | | sum\_tax\_refund\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_government\_income\_complex\_biz | integer | Defaults to 0 | | | other\_government\_income\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_government\_income\_biz | string | | | | average\_other\_government\_income\_deposit\_biz | number | Defaults to 0 | | | other\_government\_income\_trend\_simple\_biz | string | | | | sum\_other\_government\_income\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_government\_income\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_types\_of\_income\_complex\_biz | integer | Defaults to 0 | | | other\_types\_of\_income\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_types\_of\_income\_biz | string | | | | average\_other\_types\_of\_income\_deposit\_biz | number | Defaults to 0 | | | other\_types\_of\_income\_trend\_simple\_biz | string | | | | sum\_other\_types\_of\_income\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_types\_of\_income\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_types\_of\_income\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_rent\_deposit\_complex\_biz | integer | Defaults to 0 | | | rent\_deposit\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_rent\_deposit\_biz | string | | | | average\_rent\_deposit\_deposit\_biz | number | Defaults to 0 | | | rent\_deposit\_trend\_simple\_biz | string | | | | sum\_rent\_deposit\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_current\_month\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_current\_month\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_previous\_month\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_30\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_30\_days\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_60\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_60\_days\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_90\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_90\_days\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_180\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_180\_days\_biz | integer | Defaults to 0 | | | count\_rent\_deposit\_365\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_deposit\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_income\_complex\_biz | integer | Defaults to 0 | | | other\_income\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_income\_biz | string | | | | average\_other\_income\_deposit\_biz | number | Defaults to 0 | | | other\_income\_trend\_simple\_biz | string | | | | sum\_other\_income\_biz | integer | Defaults to 0 | | | count\_other\_income\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_income\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_income\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_income\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_income\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_income\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_income\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_income\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_income\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_income\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_income\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_income\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_income\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_income\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_income\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_loan\_deposits\_complex\_biz | integer | Defaults to 0 | | | loan\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_loan\_deposits\_biz | string | | | | average\_loan\_deposits\_deposit\_biz | number | Defaults to 0 | | | loan\_deposits\_trend\_simple\_biz | string | | | | sum\_loan\_deposits\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_loan\_business\_deposits\_complex\_biz | integer | Defaults to 0 | | | loan\_business\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_loan\_business\_deposits\_biz | string | | | | average\_loan\_business\_deposits\_deposit\_biz | number | Defaults to 0 | | | loan\_business\_deposits\_trend\_simple\_biz | string | | | | sum\_loan\_business\_deposits\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_loan\_business\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_business\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_mortgage\_deposits\_complex\_biz | integer | Defaults to 0 | | | mortgage\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_mortgage\_deposits\_biz | string | | | | average\_mortgage\_deposits\_deposit\_biz | number | Defaults to 0 | | | mortgage\_deposits\_trend\_simple\_biz | string | | | | sum\_mortgage\_deposits\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_micro\_loan\_deposits\_complex\_biz | integer | Defaults to 0 | | | micro\_loan\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_micro\_loan\_deposits\_biz | string | | | | average\_micro\_loan\_deposits\_deposit\_biz | number | Defaults to 0 | | | micro\_loan\_deposits\_trend\_simple\_biz | string | | | | sum\_micro\_loan\_deposits\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_auto\_loan\_deposits\_complex\_biz | integer | Defaults to 0 | | | auto\_loan\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_auto\_loan\_deposits\_biz | string | | | | average\_auto\_loan\_deposits\_deposit\_biz | number | Defaults to 0 | | | auto\_loan\_deposits\_trend\_simple\_biz | string | | | | sum\_auto\_loan\_deposits\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_loan\_deposits\_complex\_biz | integer | Defaults to 0 | | | other\_loan\_deposits\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_loan\_deposits\_biz | string | | | | average\_other\_loan\_deposits\_deposit\_biz | number | Defaults to 0 | | | other\_loan\_deposits\_trend\_simple\_biz | string | | | | sum\_other\_loan\_deposits\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_deposits\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_operating\_expenses\_complex\_biz | integer | Defaults to 0 | | | operating\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_operating\_expenses\_biz | string | | | | average\_operating\_expenses\_deposit\_biz | number | Defaults to 0 | | | operating\_expenses\_trend\_simple\_biz | string | | | | sum\_operating\_expenses\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_vendor\_expenses\_complex\_biz | integer | Defaults to 0 | | | vendor\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_vendor\_expenses\_biz | string | | | | average\_vendor\_expenses\_deposit\_biz | number | Defaults to 0 | | | vendor\_expenses\_trend\_simple\_biz | string | | | | sum\_vendor\_expenses\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_vendor\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_vendor\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_cash\_withdrawals\_complex\_biz | integer | Defaults to 0 | | | cash\_withdrawals\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_cash\_withdrawals\_biz | string | | | | average\_cash\_withdrawals\_deposit\_biz | number | Defaults to 0 | | | cash\_withdrawals\_trend\_simple\_biz | string | | | | sum\_cash\_withdrawals\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_current\_month\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_current\_month\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_previous\_month\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_30\_days\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_30\_days\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_60\_days\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_60\_days\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_90\_days\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_90\_days\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_180\_days\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_180\_days\_biz | integer | Defaults to 0 | | | count\_cash\_withdrawals\_365\_days\_biz | integer | Defaults to 0 | | | sum\_cash\_withdrawals\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_payroll\_expenses\_complex\_biz | integer | Defaults to 0 | | | payroll\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_payroll\_expenses\_biz | string | | | | average\_payroll\_expenses\_deposit\_biz | number | Defaults to 0 | | | payroll\_expenses\_trend\_simple\_biz | string | | | | sum\_payroll\_expenses\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_payroll\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_payroll\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_credit\_card\_expenses\_complex\_biz | integer | Defaults to 0 | | | credit\_card\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_credit\_card\_expenses\_biz | string | | | | average\_credit\_card\_expenses\_deposit\_biz | number | Defaults to 0 | | | credit\_card\_expenses\_trend\_simple\_biz | string | | | | sum\_credit\_card\_expenses\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_credit\_card\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_credit\_card\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_operating\_expenses\_complex\_biz | integer | Defaults to 0 | | | other\_operating\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_operating\_expenses\_biz | string | | | | average\_other\_operating\_expenses\_deposit\_biz | number | Defaults to 0 | | | other\_operating\_expenses\_trend\_simple\_biz | string | | | | sum\_other\_operating\_expenses\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_operating\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_liabilities\_complex\_biz | integer | Defaults to 0 | | | liabilities\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_liabilities\_biz | string | | | | average\_liabilities\_deposit\_biz | number | Defaults to 0 | | | liabilities\_trend\_simple\_biz | string | | | | sum\_liabilities\_biz | integer | Defaults to 0 | | | count\_liabilities\_current\_month\_biz | integer | Defaults to 0 | | | sum\_liabilities\_current\_month\_biz | integer | Defaults to 0 | | | count\_liabilities\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_liabilities\_previous\_month\_biz | integer | Defaults to 0 | | | count\_liabilities\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_liabilities\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_liabilities\_30\_days\_biz | integer | Defaults to 0 | | | sum\_liabilities\_30\_days\_biz | integer | Defaults to 0 | | | count\_liabilities\_60\_days\_biz | integer | Defaults to 0 | | | sum\_liabilities\_60\_days\_biz | integer | Defaults to 0 | | | count\_liabilities\_90\_days\_biz | integer | Defaults to 0 | | | sum\_liabilities\_90\_days\_biz | integer | Defaults to 0 | | | count\_liabilities\_180\_days\_biz | integer | Defaults to 0 | | | sum\_liabilities\_180\_days\_biz | integer | Defaults to 0 | | | count\_liabilities\_365\_days\_biz | integer | Defaults to 0 | | | sum\_liabilities\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_insurance\_payments\_complex\_biz | integer | Defaults to 0 | | | insurance\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_insurance\_payments\_biz | string | | | | average\_insurance\_payments\_deposit\_biz | number | Defaults to 0 | | | insurance\_payments\_trend\_simple\_biz | string | | | | sum\_insurance\_payments\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_insurance\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_insurance\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_rent\_payments\_complex\_biz | integer | Defaults to 0 | | | rent\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_rent\_payments\_biz | string | | | | average\_rent\_payments\_deposit\_biz | number | Defaults to 0 | | | rent\_payments\_trend\_simple\_biz | string | | | | sum\_rent\_payments\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_rent\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_rent\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_telecom\_payments\_complex\_biz | integer | Defaults to 0 | | | telecom\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_telecom\_payments\_biz | string | | | | average\_telecom\_payments\_deposit\_biz | number | Defaults to 0 | | | telecom\_payments\_trend\_simple\_biz | string | | | | sum\_telecom\_payments\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_telecom\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_telecom\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_utility\_payments\_complex\_biz | integer | Defaults to 0 | | | utility\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_utility\_payments\_biz | string | | | | average\_utility\_payments\_deposit\_biz | number | Defaults to 0 | | | utility\_payments\_trend\_simple\_biz | string | | | | sum\_utility\_payments\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_utility\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_utility\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_loan\_payments\_biz | string | | | | average\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | loan\_payments\_trend\_simple\_biz | string | | | | sum\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_business\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | business\_loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_business\_loan\_payments\_biz | string | | | | average\_business\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | business\_loan\_payments\_trend\_simple\_biz | string | | | | sum\_business\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_business\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_business\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_mortgage\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | mortgage\_loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_mortgage\_loan\_payments\_biz | string | | | | average\_mortgage\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | mortgage\_loan\_payments\_trend\_simple\_biz | string | | | | sum\_mortgage\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_mortgage\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_mortgage\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_micro\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | micro\_loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_micro\_loan\_payments\_biz | string | | | | average\_micro\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | micro\_loan\_payments\_trend\_simple\_biz | string | | | | sum\_micro\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_micro\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_micro\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_auto\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | auto\_loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_auto\_loan\_payments\_biz | string | | | | average\_auto\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | auto\_loan\_payments\_trend\_simple\_biz | string | | | | sum\_auto\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_auto\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_auto\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_loan\_payments\_complex\_biz | integer | Defaults to 0 | | | other\_loan\_payments\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_loan\_payments\_biz | string | | | | average\_other\_loan\_payments\_deposit\_biz | number | Defaults to 0 | | | other\_loan\_payments\_trend\_simple\_biz | string | | | | sum\_other\_loan\_payments\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_loan\_payments\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_fees\_complex\_biz | integer | Defaults to 0 | | | fees\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_fees\_biz | string | | | | average\_fees\_deposit\_biz | number | Defaults to 0 | | | fees\_trend\_simple\_biz | string | | | | sum\_fees\_biz | integer | Defaults to 0 | | | count\_fees\_current\_month\_biz | integer | Defaults to 0 | | | sum\_fees\_current\_month\_biz | integer | Defaults to 0 | | | count\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | count\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_fees\_30\_days\_biz | integer | Defaults to 0 | | | sum\_fees\_30\_days\_biz | integer | Defaults to 0 | | | count\_fees\_60\_days\_biz | integer | Defaults to 0 | | | sum\_fees\_60\_days\_biz | integer | Defaults to 0 | | | count\_fees\_90\_days\_biz | integer | Defaults to 0 | | | sum\_fees\_90\_days\_biz | integer | Defaults to 0 | | | count\_fees\_180\_days\_biz | integer | Defaults to 0 | | | sum\_fees\_180\_days\_biz | integer | Defaults to 0 | | | count\_fees\_365\_days\_biz | integer | Defaults to 0 | | | sum\_fees\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_bank\_fees\_complex\_biz | integer | Defaults to 0 | | | bank\_fees\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_bank\_fees\_biz | string | | | | average\_bank\_fees\_deposit\_biz | number | Defaults to 0 | | | bank\_fees\_trend\_simple\_biz | string | | | | sum\_bank\_fees\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_current\_month\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_current\_month\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_30\_days\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_30\_days\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_60\_days\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_60\_days\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_90\_days\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_90\_days\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_180\_days\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_180\_days\_biz | integer | Defaults to 0 | | | count\_bank\_fees\_365\_days\_biz | integer | Defaults to 0 | | | sum\_bank\_fees\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_nsf\_fees\_complex\_biz | integer | Defaults to 0 | | | nsf\_fees\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_nsf\_fees\_biz | string | | | | average\_nsf\_fees\_deposit\_biz | number | Defaults to 0 | | | nsf\_fees\_trend\_simple\_biz | string | | | | sum\_nsf\_fees\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_current\_month\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_current\_month\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_30\_days\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_30\_days\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_60\_days\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_60\_days\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_90\_days\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_90\_days\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_180\_days\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_180\_days\_biz | integer | Defaults to 0 | | | count\_nsf\_fees\_365\_days\_biz | integer | Defaults to 0 | | | sum\_nsf\_fees\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_fees\_complex\_biz | integer | Defaults to 0 | | | other\_fees\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_fees\_biz | string | | | | average\_other\_fees\_deposit\_biz | number | Defaults to 0 | | | other\_fees\_trend\_simple\_biz | string | | | | sum\_other\_fees\_biz | integer | Defaults to 0 | | | count\_other\_fees\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_fees\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_fees\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_fees\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_fees\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_fees\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_fees\_365\_days\_biz | integer | Defaults to 0 | | | average\_monthly\_other\_expenses\_complex\_biz | integer | Defaults to 0 | | | other\_expenses\_frequency\_biz | string | | | | last\_2\_deposit\_dates\_other\_expenses\_biz | string | | | | average\_other\_expenses\_deposit\_biz | number | Defaults to 0 | | | other\_expenses\_trend\_simple\_biz | string | | | | sum\_other\_expenses\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_current\_month\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_previous\_month\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_2\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_3\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_4\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_5\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_6\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_7\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_8\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_9\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_10\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_11\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_12\_months\_ago\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_30\_days\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_60\_days\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_90\_days\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_180\_days\_biz | integer | Defaults to 0 | | | count\_other\_expenses\_365\_days\_biz | integer | Defaults to 0 | | | sum\_other\_expenses\_365\_days\_biz | integer | Defaults to 0 | | # /Library (Business) Source: https://docs.flinks.com/api/enrich/endpoints/libraries/business-attributes-library GET /v3/{customerId}/attributes/library/business This endpoint will return a list of all currently available Attributes in our Attributes Library for Business. This endpoint will return a list of all currently available Attributes in our Attributes Library for Business. # Payments Optimization Source: https://docs.flinks.com/api/enrich/endpoints/payment-attributes/index A dedicated endpoint to return all insights and information necessary to perform and optimize your user payments. ## Overview Flinks built the `Payments Optimization` feature in order to allow your teams to understand and optimize the chance of a user's payments being successful in the future. It allows you to quickly and easily verify if a user's balances and cash flow can support a payment of a given amount, as well as understand the most optimal day(s) to set up the corresponding payment. This API works by ingesting information from your teams and combining that with the end user's data. This produces a simplified output that provides all the information needed to set up a payment schedule. ### Questions and answers about Payment Optimization What is `Payments Optimization`? * A standalone product that requires transactional data (through either `Connectivity` or `Upload`) * Allows your team to submit additional data to Flinks and benefit from standardized, highly accurate payment date estimations and recommendations What are the available options to generate a `Payments Optimization` response? * Only via the `Payments Optimization` API at the current time ### What to expect in this section What this documentation covers: * How to set up and make calls to the `Payments Optimization` API * How to understand and read responses Before continuing with this implementation, please reach out to our ream to ensure that all required parameters are set up on your instance. # /Prepayment Source: https://docs.flinks.com/api/enrich/endpoints/payment-attributes/pre-payment POST /v3/{customerId}/prepayment/login/{LoginId}/{RequestId} Use this endpoint to submit additional information on a given end-user and retrieve Payment Optimization insights. Use the `/Prepayment` Endpoint to submit additional information on a given end-user and retrieve Payment Optimization insights that will help you and your team set the correct payment dates. ## Response Fields | **NAME** | **TYPE** | **DESCRIPTION** | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Name | string | The full name of the user that has connected their account. | | Address | string | The full civic address of the user that has connected their bank account. | | Email | string | The email address of the user that has connected their bank account. This value is null if unavailable. | | EFTEligibleAccounts | string | A count of accounts (displayed below in lists) that are eligible to be set up for EFT or ACH payments. | | AccountName | string | The name of the account as it is at the Financial Institution. | | AccountNumber | string | The full account number of the account as it is at the Financial Institution. To be used to setup payments. | | InstitutionNumber | string | The institution number of the Financial Institution linked. To be used to setup payments. | | SortCode | string | The sort-code of the Financial Institution and Account linked. To be used to setup payments. | | RoutingNumber | string | The routing number (if available) of the Financial Institution and Account linked. To be used to setup payments. | | OptimalPayments | list | A list of payments that correspond with the scheduled frequency and duration as passed within the request. For example, a duration of four will generate four distinct `dates` within this list. These dates are the most optimal dates within the calendar week where a payment of the requested frequency and amount are identified to be the most successful. Format of `date` is `MM/DD/YYYY`. | | OptimalDay | string | A textual field that represents the most optimal day of the week (limited to Monday-Friday) to initiate a payment given the amount requested. This field should be used if the OptimalPayments schedule above is not attainable for a given user. Responses can be any of: `Monday`, `Tuesday`, `Wednesday`, `Thursday`, or `Friday`. | | OverallPaymentRisk | string | A decimal field that represents the percentage chance of a payment of the submitted amount failing at any point in the future. I.e. What is the risk that the given user's balance falls below the expected repayment amount on any day in the future. A 1.00 response (100%) indicates that the user will never have enough money within their account to perform the required payment, whereas a 0.00 response (0%) indicates that the user will always have enough money in their account to perform the required payment. This is **not** a credit risk estimation, it is simply a cash flow projection. | | NSFsLast90Days | string | A count of NSFs that have occurred within the last 90 days. To be used to understand the direct risk of that user not having sufficient funds as per their direct history. | | StopPaymentsLast90Days | string | A count of stop payments that have occurred within the last 90 days. To be used to understand the direct risk of a user initiating a stop on any payments as per their direct history. | | Frequency | string | A pass-through of the requested frequency of payments. | | PaymentDates | list | A non-optimized list of dates (following the same format as the `OptimalPayments` list above. This list simply returns the exact dates that are requested based on the frequency and duration, with no optimization performed. | | Date | date | The anticipated date of funding for the initial deposit. | | Amount | string | The anticipated amount of funding for the initial deposit. | # ATTRIBUTES SPECIFIC ERROR CODES Source: https://docs.flinks.com/api/enrich/error-codes | HTTP STATUS CODE | FLINKS CODE | DESCRIPTION | MESSAGE | STEPS TO REPRODUCE | | :--------------- | :-------------------- | :------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | | 202 | `OPERATION_PENDING` | Attributes cannot be completed because GetAccountsDetail is still in process. | Attributes endpoint called while GetAccountsDetail was still being processed. | Call Attributes before a live GetAccountsDetail has been completed. | | 202 | `OPERATION_PENDING` | Attributes endpoint called while another Attributes call is processing for the same card. | There is an Attributes call for the same card still processing. | Call Attributes once, then call Attributes again while the first call is still processing. | | 400 | `SESSION_NONEXISTENT` | Authorize has not been completed, so a session has not been opened. | RequestId is invalid or session has ended. | Call Attributes without a new Authorize call being made. | | 400 | `SESSION_EXPIRED` | Attributes are called when the session has expired. | RequestId is invalid or session has ended. | Wait more than 8 minutes after calling GetAccountsDetail in cache before calling Attributes. | | 400 | `INVALID_REQUEST` | Incorrect name in the request body when calling Attributes. | The attribute `name` is not valid. | Call Attributes with an unsupported or incorrectly spelled attribute name. | | 400 | `INVALID_REQUEST` | No attributes contained within the request body. | At least a single attribute must be provided. | Call Attributes with no attribute names in the request body. | | 400 | `INVALID_REQUEST` | An unsupported filter was included in the call. | One or more filters are invalid. | Call Attributes with the filter parameter set to anything other than `Operations`. | | 400 | `INVALID_REQUEST` | The AccountId in AccountFilter is not valid. | The AccountId shown is not valid. | Call Attributes with an unsupported AccountId. | | 400 | `INVALID_REQUEST` | If AccountFilter is used, at least one accountId must be provided. | At least one accountId must be provided when AccountFilter is present. | Call Attributes with the AccountFilter parameter but no accountIds. | | 400 | `RETRY_LATER` | Attribute calculations could not be completed. Please retry later or contact your Flinks representative. | We were not able to process attributes for this card. | N/A | | 400 | `NO_TRANSACTION` | Attribute calculations could not be completed because there were no transactions. | No transactions were found. | N/A | | 403 | `FEATURE_DISABLED` | Attributes is not enabled for your instance. | The Attributes feature is currently disabled for this instance. | Call Attributes in a production environment where the clientId does not have Attributes enabled. | | 404 | `NO_TRANSACTION` | No transactions detected because GetAccountsDetail has not been called. | No transactions were found. | Call Attributes without first calling GetAccountsDetail. | | 404 | `NO_TRANSACTION` | No transactions detected because the account has no transactions. | No transactions were found. | Call Attributes for an account that has no transactions. | | 404 | `NO_TRANSACTION` | No transactions detected for the specified account type filter. | No transactions were found. | Call Attributes when the selected account filter has no transactions. | | 404 | `ACCOUNT_NOT_FOUND` | A valid accountId must be provided when using AccountFilter. | A valid accountId must be provided when using AccountFilter. | Use an invalid or non-existent accountId in AccountFilter. | # Attributes Source: https://docs.flinks.com/api/enrich/getting-started Attributes automatically transform the raw transactional data (that you get through the /GetAccountsDetail endpoint) into real-time, actionable insights. Each data attribute reveals an aspect of your clients' financial profile and consumer behaviour. Put simply, data attributes are outputs of organized, cleansed, and transformed transactional data. You get the benefits of using enriched data to feed your models and gain a better understanding of your clients behaviour, without having to deal with categorization, cleaning, or any of the multitude of other tedious tasks that arise when working with raw data. They can be put together like building blocks to create a far superior understanding of your clients behaviour. We currently provide use-case specific packages of Attributes, as well as custom packages. **Important note on use-case endpoints** : Each of the use-cases are detailed via their own `/{use-case}` endpoint. If you have a subscription for a specific use-case, these are the endpoints that you should use. You will not be able to call the /GetAllAttributes or /Attributes endpoints. **Important note on other endpoints** : If you have a subscription to our full library, you are able to choose between the use-case endpoints, the /GetAllAttributes endpoint, and/or our customizable /Attributes endpoint for your specific requirements. **Important flow for integration** : You will have to set up an additional three API calls to pull back Attributes. You should follow the API Call Flow below to ensure no errors.

A note on the API Call Flow

The previous live call to [`/GetAccountsDetail`](../connect/endpoints/account-linking/get-accounts-detail) must be completely finished before initiating the below series of calls, otherwise you may receive a `202 OPERATION_PENDING` error.
1. Make a call to `/Authorize` with the parameter `MostRecentCached:true` to exchange your `loginId` for a new `requestId` and open a session. 2. Make a call to `/GetAccountsDetail` with the parameter `requestId` to pull back transactional data ready for analysis. 3. Set up your job to call the specific `/Attributes` endpoint required only when the previous `/GetAccountsDetail` call has been successfully completed.

Operations accounts only

Operations is the only supported value.
You can test your integration directly from the API playground above, or by using the [Toolbox sandbox credentials](/guides/getting-started/testing-environments#toolbox-credentials) to make API calls against the test environment. # Webhooks Source: https://docs.flinks.com/api/enrich/webhooks We do not support Attributes payloads to be delivered via webhooks. However, the webhook with raw aggregated data can be used as a trigger to your Attributes API calls. For more information on how this process works, refer to the following flow: image showing how the process works # Endpoints Source: https://docs.flinks.com/api/outbound/endpoints Refer to the following table for a list of endpoints related to Outbound. | **SECTION** | **DESCRIPTION** | | :----------------------------------------------------- | :-------------------------------------------------- | | [Authorize](./endpoints/authorize) | Authorize with Flinks Outbound. | | [Data Recipient Management](./endpoints/data-reciepts) | Manage Data Recipients. | | [Registration Status](./endpoints/registration) | Manage the registration status of a Data Recipient. | | [Institutions Coverage](./endpoints/institutions) | Check which institutions we support. | | [FDX](./endpoints/fdx) | Financial Data Exchange (FDX) standards. | # Authorize With a Data Provider Source: https://docs.flinks.com/api/outbound/endpoints/authorize/authorize-with-a-data-provider openapi-outbound-auth.yaml GET /api/v1/authorize Use this endpoint to initiate the authorization process with a particular Data Provider. Use this endpoint to initiate the authorization process with a particular Data Provider. ## Authorization Example ```url URL theme={null} {{host}}//api/v1/authorize?client_id={{recipient_id}}&redirect_uri={{redirect_uri}}&state=abc&response_type=code&scope={{scope}}&provider_id={} ``` **Success Response:** ```url URL theme={null} https://www.example.com/callback? code=code &state=state ``` **Failure Response:** ```url URL theme={null} https://www.example.com/callback? error=access_denied &error_description=The user denied the access &state=state ``` ### How to handle an error response If you receive an error response, refer to the [List of Authorization Errors](./errors) for more information about the error and how to resolve it. # List of Authorization Errors Source: https://docs.flinks.com/api/outbound/endpoints/authorize/errors If an error occurs, the API will notify you using one of the following methods: * If the error occurs during the [*Authorization*](./authorize-with-a-data-provider) flow, you'll receive a 302 redirect. * If the error occurs while you're using the [*Token*](./token) or [*Revoke Connection*](./revoke-connection) endpoints, you'll receive a JSON response. The JSON error response will be in on of the following formats: ```json Json theme={null} { "error": "error", "error_description": "error_description" } ``` ```http Http theme={null} https://www.example.com/callback? error=error &error_description=error_description &state=state ``` ## Supported errors We recommend that you set up your configuration to expect and handle the following errors. | **ERROR** | **STATUS CODE** | | :-------------------------- | :-------------- | | access\_denied | 400 | | invalid\_request | 400 | | invalid\_client | 400 | | invalid\_grant | 400 | | invalid\_scope | 400 | | unauthorized\_client | 400 | | unsupported\_grant\_type | 400 | | unsupported\_response\_type | 400 | | unsupported\_token\_type | 400 | | server\_error | 500 | | temporarily\_unavailable | 503 | ## Common Error Scenarios Common error scenarios include consent errors and non transient failures ### Consent Errors This type of error is caused by an issue with the end users consent. If the end user denies consent during authorization, you'll receive a 302 redirect with an `error`, `error_description`, and the original state. ### Non Transient Failures This type of error is caused by a specific issue that must be addressed. You will continue to see this error until the error is corrected. | **SCENERIO** | **ERROR** | **STATUS CODE** | **ACTION** | | :----------------------------------- | :--------------------------------- | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Invalid client or client credentials | invalid\_client | 400 | Confirm the `client_id` and `client_secret` are correct. | | Authorization header is not included | invalid\_scope or invalid\_request | 400 | Include the authorization header in the request. | | Refresh token is expired or invalid | invalid\_grant | 400 | A new `refresh_token` is generated each time a user logs in, making all previous tokens unusable. Discard the `refresh_token` after each use to avoid receiving this error. | # Authorize Source: https://docs.flinks.com/api/outbound/endpoints/authorize/index Use these endpoints to authorize with Flinks Open Banking. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :------------------------------------------------------------------------------------------------- | :--------- | :--------------------------------------------------------------------------------- | | [List Active Data Providers](/api/outbound/endpoints/authorize/list-active-data-providers) | GET | Retrieves a list of Data Providers a particular Data Recipient is registered with. | | [Authorize with a Data Provider](/api/outbound/endpoints/authorize/authorize-with-a-data-provider) | GET | Initiates the authorization process with a specific Data Provider. | | [Token](/api/outbound/endpoints/authorize/token) | POST | Obtains an access token to authenticate API requests. | | [Revoke Connection](/api/outbound/endpoints/authorize/revoke-connection) | DELETE | Revokes access to the Open Banking API for an individual connection. | # List Active Data Providers Source: https://docs.flinks.com/api/outbound/endpoints/authorize/list-active-data-providers openapi-outbound-auth.yaml GET /api/v1/providers Use the /api/v1/providers endpoint to list active Data Providers. Use the `/api/v1/providers` endpoint to list which Data Providers a particular Data Recipient is registered with. Before a customer starts working with a Data Recipient, confirm their Data Provider is registered with the Data Recipient they want to work with. If the Data Recipient is already registered with the Data Provider, use the [/Authorize](./authorize-with-a-data-provider) endpoint to initiate the authorization flow. If they are not yet registered, use the [/Recipients/providers/requests](/api/outbound/endpoints/registration/request-data-provider-registrations) endpoint to submit a registration request to Flinks. To successfully call this endpoint, you must first call the [/Token](./token) endpoint using the `client_credentials` grant\_type to obtain a valid `access_token`. # List Active Data Providers (v2) Source: https://docs.flinks.com/api/outbound/endpoints/authorize/list-active-data-providers-v2 openapi-outbound-auth.yaml GET /api/v2/providers Use the /api/v2/providers endpoint to list which Data Providers a particular Data Recipient is registered with. Use the `/api/v2/providers` endpoint to list which Data Providers a particular Data Recipient is registered with.

Use this endpoint if you want to receive a more detailed response

This endpoint performs a similar function to the [List Active Data Providers (v1)](./list-active-data-providers) endpoint, but returns a more robust data response. Use this endpoint if you need to retrieve any of the data points listed in the 200 HTTPS response, such as Data Provider name, providerId, registration status, and more.
# Revoke Connection Source: https://docs.flinks.com/api/outbound/endpoints/authorize/revoke-connection openapi-outbound.yaml DELETE /api/v1/revoke Use the /api/v1/revoke endpoint to revoke access to the Open Banking API for an individual connection. Use the `/api/v1/revoke` endpoint to revoke access to the Open Banking API for an individual connection. If the request is successful, this endpoint does not return a response. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint and obtain a valid `access_token`. ## How to handle an error response If you receive an error response, refer to the [List of Authorization Errors](/api/outbound/endpoints/authorize/errors) for more information about the error and how to resolve it. # Token Source: https://docs.flinks.com/api/outbound/endpoints/authorize/token openapi-outbound-auth.yaml POST /api/v1/token Use the /api/v1/token endpoint to receive an access token. Use the `https://api.flinks.io/api/v1/token` endpoint to receive an access token so that you can start using the Open Banking API. ## Token structure When you use the `authorization_code` or `refresh_token` as the grant type, the token will include the following claims: ```json theme={null} { "client_id": "dc-7tf8aijpjqofl3uxppi136ldc", "sub": "bbc6eb83-60fa-4fb0-a6ea-9e2bd54e1071", "exp": 1709147034 } ``` The `sub` claim can be used to uniquely identify the user at the Data Provider. ## About the refresh\_token When you're using `authorization_code` as the grant type, the `refresh_token` that you receive is controlled by Flinks. It has an idle timeout of 30 days and does not expire. This means that it can be refreshed indefinitely unless it's revoked. The `refresh_token` also does not change when exchanged.

Receiving a 400, 401, or 403 response

The data collection lifecycle is not connected to the `refresh_token`. If you receive a 400, 401, or 403 error when calling this endpoint, it means that either of the tokens that are managed by Flinks have expired.
## How to handle an error response If you receive an error response, refer to the [List of Authorization Errors](/api/outbound/endpoints/authorize/errors) for more information about the error and how to resolve it. # Create a Data Recipient Source: https://docs.flinks.com/api/outbound/endpoints/data-receipts/create-a-data-recipient openapi-outbound.yaml POST /api/v1/recipients Use the /api/v1/recipients endpoint to add a new Data Recipient to the Open Banking API. Use the `/api/v1/recipients` endpoint to add a new Data Recipient to the Open Banking API. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Data Recipient Management Source: https://docs.flinks.com/api/outbound/endpoints/data-receipts/index Use these endpoints to manage Data Recipients. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :------------------------------------------------------------------------------------------------------------- | :--------- | :----------------------------------------------------------- | | [Create a Data Recipient](/api/outbound/endpoints/data-receipts/create-a-data-recipient) | POST | Adds a new Data Recipient to the Open Banking API. | | [Update a Data Recipient](/api/outbound/endpoints/data-receipts/update-a-data-recipient) | PUT | Updates redirect URLs for a particular Data Recipient. | | [Regenerate a Data Recipient Secret](/api/outbound/endpoints/data-receipts/regenerate-a-data-recipient-secret) | POST | Generates a new client secret for a specific Data Recipient. | # Regenerate a Data Recipient Secret Source: https://docs.flinks.com/api/outbound/endpoints/data-receipts/regenerate-a-data-recipient-secret openapi-outbound.yaml POST /api/v1/recipients/{client_id}/secret Use the /api/v1/recipients/{client_id}/secret endpoint to regenerate a new client secret for a particular Data Recipient. Use the `/api/v1/recipients/{client_id}/secret` endpoint to regenerate a new client secret for a particular Data Recipient. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Update a Data Recipient Source: https://docs.flinks.com/api/outbound/endpoints/data-receipts/update-a-data-recipient openapi-outbound.yaml PUT /api/v1/recipients/{client_id} Use the /api/v1/recipients/{client_id} endpoint to update the redirect URLs for a particular Data Recipient. Use the `/api/v1/recipients/{client_id}` endpoint to update the redirect URLs for a particular Data Recipient. This endpoint replaces any existing redirect URLs with the new ones that you pass. It does not append the new URLs to the old ones. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # List of Data Access Errors Source: https://docs.flinks.com/api/outbound/endpoints/fdx/fdx-errors If an error occurs while you're using the Data Access endpoints, you will receive a message similar to the following: ```json Json theme={null} { "code": code, "message": "message", "debugMessage": "Provider custom developer-level error details for troubleshooting" } ``` Each error response will include two troubleshooting headers: * `ob-correlation-id` * `ob-trace-id` If you need help from Flinks to troubleshoot and resolve an error, provide the header that you received in the response. You can find out how to do this under the heading 'Escalating the error to Flinks' below. ### Supported errors We recommend that you set up your configuration to expect and handle the following errors: | **CODE** | **MESSAGE** | **STATUS CODE** | | :------- | :-------------------------------------------------------- | :-------------- | | 401 | Invalid Input | 400 | | 403 | Subscription not found | 403 | | 500 | Internal server error | 500 | | 501 | Subsystem unavailable | 405 | | 503 | Scheduled maintenance | 503 | | 601 | Customer not found | 404 | | 602 | Customer not authorized | 401 | | 701 | Account not found | 404 | | 702 | Invalid start or end date | 400 | | 703 | Invalid date range | 400 | | 704 | Account type not supported | 422 | | 705 | Account is closed | 409 | | 800 | Payee not found | 404 | | 801 | Payee cannot be modified or deleted | 400 | | 802 | Payment not found | 404 | | 1107 | Data not found for request parameters | 404 | | 1203 | Content type not supported | 406 | | 1207 | Too many requests were sent within a short period of time | 429 | ### Common error scenarios To resolve an error, locate the error you are experiencing and complete the recommendations under the **Action** column. #### Consent errors This type of error is caused by an issue with the end user's consent. | **SCENERIO** | **CODE** | **STATUS CODE** | **ACTION** | | :------------------------------------------------------------------------------------------------------ | :------- | :-------------- | :----------------------------------------------------------------------------------------------------------------------------- | | The end user revokes consent, consent has expired, or they have not consented to a specific data scope. | 602 | 401 | If the request fails for all data collection calls, discard the `refresh_token`. The user will be required to authorize again. | #### Transient failures This type of error is caused by a temporary condition and may resolve itself quickly. | **SCENERIO** | **CODE** | **STATUS CODE** | **ACTION** | | :-------------------------------- | :-------- | :-------------- | :-------------------------------------------------------------- | | Too many requests. | 1207 | 422 | Implement an appropriate throttling mechanism. | | An unexpected error has occurred. | 500 / 503 | 500 / 502 / 503 | Implement an appropriate retry mechanism to resend the request. | #### Non Transient failures This type of error is caused by a specific issue that must be addressed. You will continue to see this error until the issue is corrected. | **SCENERIO** | **CODE** | **STATUS CODE** | **ACTION** | | :---------------------------- | :-------------- | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------- | | Invalid input | 401 / 702 / 703 | 400 | The request is malformed. If this occurs while paging, you can assume the data collected up to this point is valid. | | Subscription not found | 403 | 403 | The subscription for a given user was not found. Notify Flinks if you receive this error for all users of a specific Data Recipient. | | Account not found | 701 | 404 | The account was not found. Try again using a different account. | | Account type is not supported | 704 | 422 | The request is not supported for the endpoint, parameters, or account being requested. | | Subsystem unavailable | 501 | 405 | The information you’re requesting is not available for that particular Data Provider. | ### Issues with the access\_token If the `access_token` is expired or invalid, you'll receive a non-standard error (401 or 403 HTTP status code) and a message that looks similar to the following (in this example, the `code` and `debugMessage` field are missing): ```json Json theme={null} { "message": "message" } ``` If you experience this error, fetch a new `access_token` by calling the [*Token*](/api/outbound/endpoints/authorize/token) endpoint and using `refresh_token` as the grant type.

If you are still experiencing issues

If you complete the steps above to receive a new token but continue to experience the same error, it may be consent related. For more information about how to resolve a consent error, see the [*Consent Errors*](/api/outbound/endpoints/fdx/fdx-errors#consent-errors) section.
### Escalating the error to Flinks If you need help to troubleshoot and resolve your error, contact Flinks and provide the following information: * The [*error code*](./fdx-errors#supported-errors) that you're seeking * Actions you've taken to resolve it * The troubleshooting header you received in the response If the `access_token` is expired or invalid, you'll receive a non-standard error (a 401 or 403 HTTP status code) and a message that looks similar to the following: ```json Json theme={null} { "message": "message" } ``` # Get Account Details Source: https://docs.flinks.com/api/outbound/endpoints/fdx/get-account-details openapi-outbound.yaml GET /api/fdx/5/accounts/{account_id} Use the /api/fdx/5/accounts/{accountId} endpoint to get information about a particular customer account in FDX format. Use the `/api/fdx/5/accounts/{accountId}` endpoint to get information about a particular customer account in FDX format. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using: * grant\_type: `authorization_code` or `refresh_token` * client\_id: `{recipient client_id}` * client\_secret: `{recipient client_id}` * redirect\_uri: `{recipient redirect_uri}` * code: `{with grant type authorization_code}` * refresh\_token: `{with grant type refresh_token}` ## How to handle an error response If you receive an error response, refer to the [List of Data Access Errors](./fdx-errors) for more information about the error and how to resolve it.

Response is different for each Data Provider

This endpoint returns different fields for each Data Provider. For more information about the fields that each Data Provider supports, review the [Data Provider's details](../registration/a-data-recipient).
```json 200 - OK theme={null} { "depositAccount": { "accountId": "string", "accountCategory": "DEPOSIT_ACCOUNT", "accountType": "CHECKING", "accountNumber": "string", "accountNumberDisplay": "string", "productName": "string", "nickname": "string", "status": "OPEN", "description": "string", "currency": { "currencyRate": 1.0, "currencyCode": "USD", "originalCurrencyCode": "USD" }, "routingTransitNumber": "string", "balanceType": "ASSET", "interestRate": 1.5, "interestRateType": "FIXED", "transferIn": true, "transferOut": true, "lastActivityDate": "2024-01-15", "transactionsIncluded": true, "balanceAsOf": "2024-01-15T10:30:00Z", "currentBalance": 5000.5, "availableBalance": 4500.0, "annualPercentageYield": 1.25, "interestYtd": 25.0, "transactions": [ { "accountId": "string", "transactionId": "string", "postedTimestamp": "2024-01-14T09:00:00Z", "transactionTimestamp": "2024-01-14T09:00:00Z", "description": "Direct Deposit", "debitCreditMemo": "CREDIT", "amount": 1500.0, "status": "POSTED", "transactionType": "DEPOSIT", "payee": "Employer Inc." } ] } } ``` ```json 4XX - Result theme={null} { "code": 400, "message": "message", "debugMessage": "Provider custom developer-level error details for troubleshooting" } ``` ```json 5XX - Result theme={null} { "code": 500, "message": "message", "debugMessage": "Provider custom developer-level error details for troubleshooting" } ``` # Get Accounts Source: https://docs.flinks.com/api/outbound/endpoints/fdx/get-accounts openapi-outbound.yaml GET /api/fdx/5/accounts Use the /api/fdx/5/accounts endpoint to get a list of customer accounts in FDX format. Use the `/api/fdx/5/accounts` endpoint to get a list of customer accounts in FDX format. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using: * grant\_type: `authorization_code` or `refresh_token` * client\_id: `{recipient client_id}` * client\_secret: `{recipient client_secret}` * redirect\_uri: `{recipient redirect_uri}` * code: `{with grant type authorization_code}` * refresh\_token: `{with grant type refresh_token}` ## Result types The `resultType` query parameter controls the level of detail returned: | Value | Description | | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lightweight` (default) | Returns metadata fields only: `accountId`, `accountCategory`, `accountType`, `accountNumberDisplay`, `productName`, `nickname`, `status`, `description`, `currency`. | | `details` | Returns the full account record including balances, interest rates, transactions, and routing information. | The `routingTransitNumber` field is only returned when `resultType=details`. If you need routing/transit numbers, you must explicitly request the details result type. ## How to handle an error response If you receive an error response, refer to the [List of Data Access Errors](/api/outbound/endpoints/fdx/fdx-errors) for more information about the error and how to resolve it.

Response is different for each Data Provider

This endpoint returns different fields for each Data Provider. For more information about the fields that each Data Provider supports, review the [Data Provider's details](/api/outbound/endpoints/registration/a-data-recipient).
```json 200 - OK theme={null} { "page": { "nextOffset": "string", "totalElements": 10 }, "links": { "next": { "href": "string", "action": "string", "description": "string" } }, "accounts": [ { "depositAccount": { "accountId": "string", "accountCategory": "DEPOSIT_ACCOUNT", "accountType": "CHECKING", "accountNumber": "string", "accountNumberDisplay": "string", "productName": "string", "nickname": "string", "status": "OPEN", "description": "string", "currency": { "currencyRate": 1.0, "currencyCode": "USD", "originalCurrencyCode": "USD" }, "routingTransitNumber": "string", "balanceType": "ASSET", "interestRate": 1.5, "interestRateType": "FIXED", "transferIn": true, "transferOut": true, "lastActivityDate": "2024-01-15", "transactionsIncluded": true, "balanceAsOf": "2024-01-15T10:30:00Z", "currentBalance": 5000.5, "availableBalance": 4500.0, "annualPercentageYield": 1.25, "interestYtd": 25.0, "transactions": [ { "accountId": "string", "transactionId": "string", "postedTimestamp": "2024-01-14T09:00:00Z", "transactionTimestamp": "2024-01-14T09:00:00Z", "description": "Direct Deposit", "debitCreditMemo": "CREDIT", "amount": 1500.0, "status": "POSTED", "transactionType": "DEPOSIT", "payee": "Employer Inc." } ] } } ] } ``` ```json 200 - With Paging theme={null} { "page": { "nextOffset": "", "totalElements": 6 }, "links": { "next": { "href": "https://ob-preprod.flinksapp.dev/api/fdx/5/accounts?limit=1&offset=", "action": null, "description": null } }, "accounts": [ { "locAccount": { "accountId": "11", "accountType": "CREDITCARD", "accountNumber": "4200240024244242", "accountNumberDisplay": "4200240024244242", "productName": "Product Name Credit Card", "nickname": "Credit Card", "status": "OPEN", "description": "Credit Card", "currency": { "currencyCode": "CAD" } } } ] } ``` ```json 4XX - Result theme={null} { "code": 400, "message": "message", "debugMessage": "Provider custom developer-level error details for troubleshooting" } ``` ```json 5XX - Result theme={null} { "code": 500, "message": "message", "debugMessage": "Provider custom developer-level error details for troubleshooting" } ``` # Get Customers Source: https://docs.flinks.com/api/outbound/endpoints/fdx/get-customers openapi-outbound.yaml GET /api/fdx/5/customers/current Use the /api/fdx/5/customers/current endpoint to get information about a particular customer in FDX format. Use the `/api/fdx/5/customers/current` endpoint to get information about a particular customer in FDX format. This endpoint returns customer profile data only (name, address, phone). Account data is available separately through the [Get Accounts](/api/outbound/endpoints/fdx/get-accounts) endpoint. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using: * grant\_type: `authorization_code` or `refresh_token` * client\_id: `{recipient client_id}` * client\_secret: `{recipient client_secret}` * redirect\_uri: `{recipient redirect_uri}` * code: `{with grant type authorization_code}` * refresh\_token: `{with grant type refresh_token}` ## How to handle an error response If you receive an error response, refer to the [List of Data Access Errors](/api/outbound/endpoints/fdx/fdx-errors) for more information about the error and how to resolve it.

Response is different for each Data Provider

This endpoint returns different fields for each Data Provider. For more information about the fields that each Data Provider supports, review the [Data Provider's details](/api/outbound/endpoints/registration/a-data-recipient).
```json 200 - OK theme={null} { "customerId": "string", "name": { "first": "string", "middle": "string", "last": "string", "suffix": "string", "prefix": "string", "company": "string" }, "dateOfBirth": "string", "addresses": [ { "line1": "string", "line2": "string", "line3": "string", "city": "string", "region": "string", "postalCode": "string", "country": "string", "type": "string" } ], "telephones": [ { "type": "string", "number": "string", "country": "string" } ], } ``` ```json 4XX - Result theme={null} { "code": 601, "message": "Customer not found", "debugMessage": "The provided customer was not found" } ``` ```json 5XX - Result theme={null} { "code": 500, "message": "Internal server error", "debugMessage": "An unexpected error occured" } ``` # Get Payment Networks Source: https://docs.flinks.com/api/outbound/endpoints/fdx/get-payment-networks openapi-outbound.yaml GET /api/fdx/5/accounts/{account_id}/payment-networks Use the /api/fdx/5/accounts/{accountId}/payment-networks endpoint to return a list of payment networks for a particular account. Use the `/api/fdx/5/accounts/{accountId}/payment-networks` endpoint to return a list of payment networks for a particular account. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using: * grant\_type: `authorization_code` or `refresh_token` * client\_id: `{recipient client_id}` * client\_secret: `{recipient client_secret}` * redirect\_uri: `{recipient redirect_uri}` * code: `{with grant type authorization_code}` * refresh\_token: `{with grant type refresh_token}`

Not all Data Providers support this endpoint

If the Data Provider does not support payment networks, this endpoint returns 405 Method Not Allowed.

Response is different for each Data Provider

This endpoint returns different fields for each Data Provider. For more information about the fields that each Data Provider supports, review the [Data Provider's details](/api/outbound/endpoints/registration/a-data-recipient).
## How to handle an error response If you receive an error response, refer to the [List of Data Access Errors](/api/outbound/endpoints/fdx/fdx-errors) for more information about the error and how to resolve it. ```json 200 - First Page theme={null} { "page": { "nextOffset": "806801cd-999a-461b-9d08-5fd95d0e3300", "totalElements": 5 }, "links": { "next": { "href": "https://ob.flinksapp.com/api/fdx/5/accounts/11/payment-networks?limit=1&offset=806801cd-999a-461b-9d08-5fd95d0e3300" } }, "paymentNetworks": [ { "bankId": "string", "identifier": "string", "identifierType": "ACCOUNT_NUMBER", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ```json 200 - Last Page theme={null} { "paymentNetworks": [ { "bankId": "string", "identifier": "string", "identifierType": "ACCOUNT_NUMBER", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ```json 200 - Result theme={null} { "page": { "nextOffset": "1", "totalElements": 5 }, "links": { "next": { "href": "https://ob.flinksapp.com/api/fdx/5/accounts/11/payment-networks?offset=1&limit=1" } }, "paymentNetworks": [ { "bankId": "string", "identifier": "string", "identifierType": "ACCOUNT_NUMBER", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ```json 4XX - Result theme={null} { "code": 701, "message": "Account not found", "debugMessage": "The account was not found" } ``` ```json 5XX - Result theme={null} { "code": 500, "message": "Internal Server Error", "debugMessage": "An unexpected error occured" } ``` # Get Transactions Source: https://docs.flinks.com/api/outbound/endpoints/fdx/get-transactions openapi-outbound.yaml GET /api/fdx/5/accounts/{account_id}/transactions Use the /api/fdx/5/accounts/{accountId}/transactions endpoint to get the transaction history for a particular account. Use the `/api/fdx/5/accounts/{accountId}/transactions` endpoint to get the transaction history for a particular account. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using: * grant\_type: `authorization_code` or `refresh_token` * client\_id: `{recipient client_id}` * client\_secret: `{recipient client_secret}` * redirect\_uri: `{recipient redirect_uri}` * code: `{with grant type authorization_code}` * refresh\_token: `{with grant type refresh_token}`

Response is different for each Data Provider

This endpoint returns different fields for each Data Provider. For more information about the fields that each Data Provider supports, review the [Data Provider's details](/api/outbound/endpoints/registration/a-data-recipient).
## How to handle an error response If you receive an error response, refer to the [List of Data Access Errors](/api/outbound/endpoints/fdx/fdx-errors) for more information about the error and how to resolve it. ```json 200 - First Page theme={null} { "page": { "nextOffset": "97fcd39f-6e32-470b-a107-d4cb1080abcc", "totalElements": 32 }, "links": { "next": { "href": "https://ob-preprod.flinksapp.dev/api/fdx/5/accounts/11/transactions?startTime=2020-01-01&endTime=2020-02-01&limit=1&offset=97fcd39f-6e32-470b-a107-d4cb1080abcc" } }, "transactions": [ { "locTransaction": { "accountId": "11", "transactionId": "1", "postedTimestamp": "2020-02-01T00:00:00.0000000Z", "transactionTimestamp": "2020-02-01T00:00:00.0000000Z", "description": "Transaction TrxLoc@Cr0.01", "debitCreditMemo": "CREDIT", "amount": 1.1, "status": "POSTED" } } ] } ``` ```json 200 - Last Page theme={null} { "transactions": [ { "locTransaction": { "accountId": "11", "transactionId": "31", "postedTimestamp": "2020-03-01T00:00:00.0000000Z", "transactionTimestamp": "2020-03-01T00:00:00.0000000Z", "description": "Transaction TrxLoc@Cr0.01", "debitCreditMemo": "CREDIT", "amount": 1.1, "status": "POSTED" } } ] } ``` ```json 200 - Result theme={null} { "transactions": [ { "depositTransaction": { "accountId": "string", "transactionId": "string", "referenceTransactionId": "string", "category": "string", "subCategory": "string", "postedTimestamp": "string", "transactionTimestamp": "string", "description": "string", "debitCreditMemo": "CREDIT", "amount": 1.1, "foreignAmount": 1.1, "foreignCurrency": "string", "status": "AUTHORIZATION", "fiAttributes": [ { "name": "string", "value": "string" } ], "transactionType": "ADJUSTMENT", "payee": "string" }, "loanTransaction": { "accountId": "string", "transactionId": "string", "referenceTransactionId": "string", "category": "string", "subCategory": "string", "postedTimestamp": "string", "transactionTimestamp": "string", "description": "string", "debitCreditMemo": "CREDIT", "amount": 1.1, "foreignAmount": 1.1, "foreignCurrency": "string", "status": "AUTHORIZATION", "fiAttributes": [ { "name": "string", "value": "string" } ], "transactionType": "PAYMENT" }, "locTransaction": { "accountId": "string", "transactionId": "string", "referenceTransactionId": "string", "category": "string", "subCategory": "string", "postedTimestamp": "string", "transactionTimestamp": "string", "description": "string", "debitCreditMemo": "CREDIT", "amount": 1.1, "foreignAmount": 1.1, "foreignCurrency": "string", "status": "AUTHORIZATION", "fiAttributes": [ { "name": "string", "value": "string" } ], "transactionType": "PAYMENT" }, "investmentTransaction": { "accountId": "string", "transactionId": "string", "referenceTransactionId": "string", "category": "string", "subCategory": "string", "postedTimestamp": "string", "transactionTimestamp": "string", "description": "string", "debitCreditMemo": "CREDIT", "amount": 1.1, "foreignAmount": 1.1, "foreignCurrency": "string", "status": "AUTHORIZATION", "fiAttributes": [ { "name": "string", "value": "string" } ], "transactionType": "PURCHASED", "shares": 1.1, "securityIdType": "CUSIP", "orderType": "BUY", "securityType": "BOND", "inv401kSource": "AFTERTAX", "incomeType": "CGLONG", "subAccountSec": "CASH", "subAccountFund": "CASH", "unitType": "CURRENCY", "transactionReason": "CALL", "positionType": "LONG", "faceValue": 1.1, "price": 1.1, "securityId": "string", "symbol": "string", "markup": 1.1, "commission": 1.1, "taxes": 1.1, "fees": 1.1, "load": 1.1, "confirmationNumber": "string", "fractionalCash": 1.1, "oldUnits": 1.1, "splitRatioNumerator": 0, "splitRatioDenominator": 0, "newUnits": 1.1, "loanId": "string", "loanPrincipal": 1.1, "loanInterest": 1.1, "payrollDate": "string", "priorYearContrib": true, "withholding": 1.1, "taxExempt": true, "gain": 1.1, "stateWithholding": 1.1, "penalty": 1.1, "runningBalance": 1.1, "unitPrice": 1.1, "units": 1.1, "accruedInterest": 1.1, "digitalUnits": "string", "transferAction": "IN" } } ] } ``` ```json 4XX - Result theme={null} { "code": 702, "message": "Invalid start or end date", "debugMessage": "Start time is invalid" } ``` ```json 5XX - Result theme={null} { "code": 500, "message": "Internal Server Error", "debugMessage": "An unexpected error occured" } ``` # FDX Source: https://docs.flinks.com/api/outbound/endpoints/fdx/index Use these endpoints to perform actions related to FDX standards. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :----------------------------------------------------------------------- | :--------- | :----------------------------------------------------------------------- | | [Get Customers](/api/outbound/endpoints/fdx/get-customers) | GET | Retrieves a list of customers associated with a Data Recipient. | | [Get Accounts](/api/outbound/endpoints/fdx/get-accounts) | GET | Retrieves account information for a specific customer. | | [Get Account Details](/api/outbound/endpoints/fdx/get-account-details) | GET | Retrieves detailed information about a specific account. | | [Get Transactions](/api/outbound/endpoints/fdx/get-transactions) | GET | Retrieves transaction history for a specific account. | | [Get Payment Networks](/api/outbound/endpoints/fdx/get-payment-networks) | GET | Retrieves a list of payment networks associated with a specific account. | # Get All Data Recipients Source: https://docs.flinks.com/api/outbound/endpoints/institutions/get-all-data-recipients openapi-outbound.yaml GET /api/v1/recipients Use the /api/v1/recipients endpoint to get a list of all registered Data Recipients. Use the `/api/v1/recipients` endpoint to get a list of all registered Data Recipients. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Get Data Provider Details Source: https://docs.flinks.com/api/outbound/endpoints/institutions/get-data-provider-details openapi-outbound.yaml GET /api/v1/providers/{provider_id} Use the /api/v1/providers endpoint to retrieve information about a particular Data Provider such as their country, their data scopes, the FDX fields they support, and more. Use the `/api/v1/providers` endpoint to retrieve information about a particular `Data Provider` such as their country, their data scopes, the FDX fields they support, and more. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Get Data Recipient Details Source: https://docs.flinks.com/api/outbound/endpoints/institutions/get-data-recipient-details openapi-outbound.yaml GET /api/v1/recipients/{client_id} Use the /api/v1/recipients/{client_id} endpoint to get additional details for a particular Data Recipient, including the scopes and redirect URLs. Use the `/api/v1/recipients/{client_id}` endpoint to get additional details for a particular Data Recipient, including the scopes and redirect URLs. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Get Supported Data Providers Source: https://docs.flinks.com/api/outbound/endpoints/institutions/get-supported-data-providers openapi-outbound.yaml GET /api/v1/providers Use the /api/v1/providers endpoint to retrieve a list of all supported Data Providers in the Outbound ecosystem. Use the `/api/v1/providers` endpoint to retrieve a list of all supported Data Providers in the Outbound ecosystem. You may need this information for marketing purposes, or to show your customers who we support. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Institutions Coverage Source: https://docs.flinks.com/api/outbound/endpoints/institutions/index Use these endpoints to get information about the Data Recipients we support. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :------------------------------------------------------------------------------------------------ | :--------- | :------------------------------------------------------------ | | [Get Supported Data Providers](/api/outbound/endpoints/institutions/get-supported-data-providers) | GET | Lists all supported Data Providers in the Outbound ecosystem. | | [Get Data Provider Details](/api/outbound/endpoints/institutions/get-data-provider-details) | GET | Retrieves details of a specific Data Provider. | | [Get All Data Recipients](/api/outbound/endpoints/institutions/get-all-data-recipients) | GET | Lists all Data Recipients registered in the system. | | [Get Data Recipient Details](/api/outbound/endpoints/institutions/get-data-recipient-details) | GET | Retrieves details of a specific Data Recipient. | # Get the Registration Status for a Data Recipient Source: https://docs.flinks.com/api/outbound/endpoints/registration/a-data-recipient openapi-outbound.yaml GET /api/v1/recipients/{client_id}/providers/requests Use the /api/v1/recipients/{client_id}/providers/requests endpoint to check the registrations status of a Data Recipient. Use the `/api/v1/recipients/{client_id}/providers/requests` endpoint to check the registrations status of a Data Recipient. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` The following is a list of possible registration statuses: | **STATUS** | **DESCRIPTION** | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PENDING_APPROVAL` | A partner has sent a registration request and is awaiting approval from Flinks. | | `PENDING_ACTIVATION` | Flinks has approved the registration request and it's been sent to the Data Provider for activation. | | `ACTIVE` | The Data Provider is registered with the Data Recipient. The Data Recipient can successfully use the Flinks Open Banking API for this particular Data Provider. | # Get the Registration Status for All Data Recipients Source: https://docs.flinks.com/api/outbound/endpoints/registration/all-data-recipients openapi-outbound.yaml GET /api/v1/recipients/providers/requests Use the /api/v1/recipients/providers/requests endpoint to check the registrations status of all Data Recipients. Use the `/api/v1/recipients/providers/requests` endpoint to check the registrations status of all Data Recipients. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` The following is a list of possible registration statuses: | **STATUS** | **DESCRIPTION** | | :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PENDING_APPROVAL` | A partner has sent a registration request and is awaiting approval from Flinks. | | `PENDING_ACTIVATION` | Flinks has approved the registration request and it has been sent to the Data Provider for activation. | | `ACTIVE` | The Data Provider is registered with the Data Recipient. The Data Recipient can successfully use the Flinks Open Banking API for this particular Data Provider. | # Registration Status Source: https://docs.flinks.com/api/outbound/endpoints/registration/index Use these endpoints to manage a registration status. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :-------------------------------------------------------------------------------------------------------------- | :--------- | :----------------------------------------------------------------------- | | [Request Data Provider Registrations](/api/outbound/endpoints/registration/request-data-provider-registrations) | POST | Submits a request to connect Data Recipients with Data Providers. | | [Get the Registrations Status for a Data Recipient](/api/outbound/endpoints/registration/a-data-recipient) | GET | Checks the registration status of a Data Recipient with a Data Provider. | | [Get the Registration Status for All Data Recipients](/api/outbound/endpoints/registration/all-data-recipients) | GET | Retrieves the registration status of all Data Recipients. | # Request Data Provider Registrations Source: https://docs.flinks.com/api/outbound/endpoints/registration/request-data-provider-registrations openapi-outbound.yaml POST /api/v1/recipients/providers/requests/{recipient_ids}/{provider_ids} Use the POST /api/v1/recipients/providers/requests/{recipient_ids}/{provider_ids} endpoint to submit a request to Flinks to connect Data Recipients with Data Providers. Flinks will evaluate the request and approve the registrations. Use the POST `/api/v1/recipients/providers/requests/{recipient_ids}/{provider_ids}` endpoint to submit a request to Flinks to connect Data Recipients with Data Providers. Flinks will evaluate the request and approve the registrations. To successfully call this endpoint, you must first call the [/Token](/api/outbound/endpoints/authorize/token) endpoint to obtain a valid `access_token` using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` # Getting Started Source: https://docs.flinks.com/api/outbound/getting-started This page will help you get started with the Open Banking API.

This API is for our Open Banking product

This API is used for Outbound, the Flinks Open Banking product. For more information about using Outbound, speak with your Flinks Representative.
## Using the Open Banking API The open banking API is used by both Data Recipients and Partners to connect customer accounts and securely receive financial data from the customer's financial institution. Our Data Access endpoints use Financial Data Exchange (FDX), an industry standard, to securely transfer financial data. You'll see the following terms when using our documentation: * **Data Provider**: A financial institution or bank with which a customer has an account. The customer provides consent for the Data Provider to release their financial data to Partners and Data Recipients so they can use their services. * **Partner**: An organization that provides a financial service and is fully integrated in the Outbound ecosystem. * **Data Recipient**: An organization that provides a financial service, but is not fully integrated in the Outbound ecosystem. Flinks completes some of the technical integration aspects on their behalf, including the Data provider registration process. At a high level, Data Recipients receive data from financial institutions. ### Before you begin Before you can start calling this API, you must receive client credentials from Flinks. This includes a \`client\_id and client\_secret. Client credentials are used to identify you as a specific client of Flinks and grant you secure access to our APIs. We provide these during the onboarding process. ### Making your first API call Getting started with this API differs slightly depending on which type of client you are. Refer to one of the following pages for more information on how to make your first API call. # Get Started as a Partner Complete the following sections to use the Open Banking API as a Partner. ## Get an Access Token To call any of our [Endpoints for Partners](../outbound/endpoints/institutions/get-supported-data-providers), use the client credentials that we provided to you during onboarding to obtain an `access_token`. Call the [`/Token`](./endpoints/authorize/token) endpoint using the following settings: * grant\_type: `client_credentials` * client\_id: `{partner client_id}` * client\_secret: `{partner client_secret}` * scope: `client:admin` If the request is successful, you'll receive an access `\token`: ```json Json theme={null} { "access_token": "{access_token}" } ``` Store the `access_token` in a secure location, as you will need it to make future API calls. Each `access_token` has an expiry date that's defined in the `expires_in` of the response. When an `access_token` expires, discard it and complete this step again to obtain a new one. If you pass an expired or invalid `access_token`, you'll receive a 400 error response. ## Register with Data Providers If this is your first time using the Open Banking API, register to the Data Providers your customers are working with so they can securely share the customer's financial data with them. Call the [`/Recipients/providers/requests`](./endpoints/registration/all-data-recipients) endpoint to submit a registration request and provide the ID of the Data Provider(s) you want to register with. Flinks reviews the request and approves it. To check the status of a registration, call the [`/Recipients/{client_id}/providers/requests`](./endpoints/registration/a-data-recipient) endpoint. The following is a list of possible registration statuses: | **STATUS** | **DESCRIPTION** | | :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `PENDING_APPROVAL` | A partner has sent a registration request and is awaiting approval from Flinks. | | `PENDING_ACTIVATION` | Flinks has approved the registration request and it's been sent to the Data Provider for activation. | | `ACTIVE` | The Data Provider is registered with the Data Recipient. The Data Recipient can successfully use the Flinks Open Banking API for this particular Data Provider. | # Get Started as a Data Recipient Complete the following sections to use the Open Banking API as a Data Recipient. ## (Optionally) Determine which Data Providers a Data Recipient is registered to Get an `access_token` by passing your client credentials to the `/Token` endpoint. Then, call the `/Providers` endpoint and pass the `access_token`. You'll receive a list of Data Providers who are registered to the Data Recipient. This step is optional and not required to authorize. ## Authorize with a Data Provider Initiate the authorization process with the Data Provider by calling the [`/Authorize`](./endpoints/authorize/authorize-with-a-data-provider) endpoint. If the request is successful and the customer provides consent, you'll receive a 302 response at the `redirect_uri`, an authorization `code`, and the original `state`. If the request is not successful or the customer declines to provide consent, you'll receive an `error`, `error_description`, and the original `state`. Below is the Example Authorize URL: ```bash Url theme={null} https://api.flinks.io/api/v1/authorize? response_type=code &client_id=clientid &redirect_uri=https%3A%2F%2Fexample.com%2Fcallback &scope=ACCOUNT_BASIC%20ACCOUNT_DETAILED%20ACCOUNT_PAYMENTS%20INVESTMENTS%20TRANSACTIONS%20STATEMENTS%20CUSTOMER_CONTACT%20CUSTOMER_PERSONAL &state=state &provider_id=1000 &correlation_id=fce84d61-dfa8-4e2b-bd94-f1ec6a445841 ``` You will receive the following on success: ```bash Url theme={null} https://www.example.com/callback? code=code &state=state ``` And you will receive the following on a failure: ```bash Url theme={null} https://www.example.com/callback? error=access_denied &error_description=The user denied the access &state=state ``` ## Exchange the authorization code for an access token Call the [`/Token`](./endpoints/authorize/token) endpoint and use `authorization_code` as the `grant_type`. If the request is successful, you'll receive an access token: ```json Json theme={null} { "access_token": "{access_token}", "token_type": "Bearer", "expires_in": 300, "refresh_token": "{refresh_token}" } ``` ## Start receiving your data Use the `access_token` to call the [Data Access endpoints](./endpoints/fdx/index) and start receiving your data. For example, to get customer account data, call the `/Accounts` endpoint and pass the `access_token`. ## Get a refresh token When your `access_token` expires, call the [`/Token`](./endpoints/authorize/token) endpoint and use the `refresh_token` as the `grant_type`. If the request is successful, you'll receive a new `access_token`. # Endpoints Source: https://docs.flinks.com/api/pay/endpoints Refer to the following table for a list of endpoints related to Pay products at Flinks. | **SECTION** | **DESCRIPTION** | | :--------------------------------------------------- | :--------------------------------------------------------- | | [Authorize](/api/pay/endpoints/authorize/) | Initiate a new session in the Flinks Pay application. | | [E-Transfer Payments](/api/pay/endpoints/e-transfer) | Initiate a payment using e-transfer as the payment method. | | [EFT](/api/pay/endpoints/eft) | Create and manage EFT debit and credit transactions. | | [GEFT](/api/pay/endpoints/geft) | Initiate a payment using GEFT as the payment method. | # /Authorize Source: https://docs.flinks.com/api/pay/endpoints/authorize/authorize openapi-pay.yaml POST /api/v1/authorize Authorize and generate an access token. Authorize with Flinks to obtain an `access_token` used for subsequent FlinksPay API calls. Pass your onboarding `Username` / `Password` with URL-encoded `grant_type=client_credentials`. Tokens are time-limited (see `expires_in` in the response, default 299 seconds) and **single-use**: generate a new one for each session. If you believe credentials have been compromised, contact Flinks to rotate them.

One token per session

A token can only initiate a single session. Call `/Authorize` again before each subsequent session.
# Authorize Source: https://docs.flinks.com/api/pay/endpoints/authorize/index Use these endpoints to authorize before using Flinks Pay. Review the table below for more information. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :-------------------------------------------------- | :--------- | :---------------------------------------------------- | | [Authorize](/api/pay/endpoints/authorize/authorize) | POST | Initiate a new session in the Flinks Pay application. | # E-Transfer API Overview Source: https://docs.flinks.com/api/pay/endpoints/e-transfer/index Complete API reference for Interac e-Transfer (Request For Money) payments The Flinks Interac (e-Transfer) API lets you initiate a Request For Money (RFM) session and collect payments from end users through Interac e-Transfer. This reference covers the endpoints needed to create a session and retrieve its details. ## Base URL **Production / Sandbox:** `{{BaseUri}}` ## Authentication All e-Transfer API requests use OAuth 2.0 Client Credentials flow: 1. **Authenticate** with Basic auth using Client ID and Secret 2. **Receive** Bearer token valid for 599 seconds (10 minutes) 3. **Use** Bearer token for all subsequent API calls 4. **Refresh** token before expiration ## API Endpoints ### Authentication | Method | Endpoint | Description | | ------ | ------------------- | ------------------------------------------------------------- | | POST | `/api/v1/authorize` | [Obtain access token](/api/pay/endpoints/authorize/authorize) | ### Session Management | Method | Endpoint | Description | | ------ | -------------------------------------- | ------------------------------------------------------------------------------ | | POST | `/api/v2/sessions` | [Initiate e-Transfer session](/api/pay/endpoints/e-transfer/sessions-initiate) | | GET | `/api/v2/sessions/{sessionId}/details` | [Get session details](/api/pay/endpoints/e-transfer/sessions-details) | ## Quick Start ### 1. Authenticate ```bash theme={null} curl --location '{{BaseUri}}/api/v1/authorize' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Username:Password}}' \ --data-urlencode 'grant_type=client_credentials' ``` ### 2. Initiate Session ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "e-Transfer", "direction": "CREDIT", "currency": "CAD", "amount": 250.00, "options": { "notificationPreferences": { "language": "EN", "sendInteracLink": false } }, "payor": { "firstName": "John", "lastName": "Smith", "email": "john.smith@example.com" } }' ``` ### 3. Launch User Flow ```html theme={null} ``` ### 4. Retrieve Session Details ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ## Session Object ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345", "status": "Completed", "type": "e-Transfer", "direction": "CREDIT", "currency": "CAD", "amount": 250.00 } ``` ## Session Statuses | Status | Description | | ----------- | ----------------------------------------------------- | | `Initiated` | Session created, awaiting user action | | `Completed` | User has successfully completed the flow | | `Failed` | Session failed (for example, identity or eligibility) | | `Cancelled` | Session was cancelled | | `Expired` | Session timed out before completion | ## Field Specifications ### Character Limits | Field | Limit | Notes | | ------------------------------------- | ------------------ | ---------------------------------------- | | `firstName`, `lastName`, `middleName` | 100 characters | Required for identity matching | | `email` | 100 characters | Used for notifications and link delivery | | `referenceId` | 100 characters | Strongly recommended for tracking | | `addressLine1` | 100 characters | Street address | | `city` | 100 characters | Full city name | | `postalCode` | 6 characters | No spaces (e.g., M5V0T7) | | `province` | 2 characters | Provincial code (e.g., ON, QC) | | `country` | 2 characters | Only "CA" supported | | `accountNumber` | 7 to 12 characters | Numbers only | | `transitNumber` | 5 characters | Numbers only | | `institutionCode` | 3 characters | Numbers only | ### Validation Rules **Amount** * Up to 2 decimal places * Minimum and maximum are client-configurable via session `options.limits` **Currency** * Only `CAD` is supported **Payment Type** * `e-Transfer` for Interac e-Transfer sessions * `EFT` for EFT sessions **Payment Direction** * `CREDIT`: funds flow to the payee * `DEBIT`: funds flow from the payor ## Notification Preferences Control how the end user is notified of the request: * `language`: `EN` or `FR` * `sendInteracLink`: when `true`, Flinks sends the Interac e-Transfer request link directly to `payor.email`. When `false`, you distribute the hosted app URL yourself. ## Frontend Integration ### iFrame URL Pattern ```text theme={null} {{BaseUri}}/app/?sessionId={{sessionId}} ``` ### Event Monitoring ```javascript theme={null} window.addEventListener('message', function(e) { console.log('e-Transfer Event:', e.data); if (e.data.Step === 'SUCCESS') { // Session completed successfully } else if (e.data.Step === 'EXIT') { // User exited the flow } }); ``` ## Error Handling Error responses follow the RFC 7807 `ProblemDetails` format: ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Missing required field: payor.firstName" } ``` **Common HTTP status codes** | Status | Meaning | | ------ | ------------------------------- | | 201 | Session created | | 200 | Request succeeded | | 400 | Invalid request payload | | 401 | Missing or invalid access token | | 403 | Access denied | ## Next Steps 1. [**Authentication**](/api/pay/endpoints/authorize/authorize): obtain an access token 2. [**Initiate Session**](/api/pay/endpoints/e-transfer/sessions-initiate): create an e-Transfer session 3. [**Session Details**](/api/pay/endpoints/e-transfer/sessions-details): retrieve session information 4. [**Setup Guide**](/guides/pay/e-transfer/setup-flinks-pay): complete implementation walkthrough # Cancel Active Session Source: https://docs.flinks.com/api/pay/endpoints/e-transfer/sessions-cancel pay-interac.yaml POST /api/v2/sessions/{sessionId}/cancel Immediately terminate an active e-Transfer session to prevent further user access or resumption. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Cancel Active Session Use this endpoint to immediately close an active session so the user can no longer access or resume the e-Transfer flow. This is useful when a user abandons the flow in your application and you want to ensure the session cannot be reused. ### When to Use This Endpoint * User abandons the payment flow in your application * Need to prevent session reuse for security reasons * Want to clean up active sessions before their natural timeout * Implementing session cleanup workflows ### Session Termination Behavior When you call this endpoint with a valid sessionId: * **Immediate termination**: The session is terminated immediately * **Frontend handling**: The hosted front-end will behave as if the session has timed out and display an appropriate error state * **Status change**: Session status changes to `Cancelled` ## Implementation Notes **Recommended but not required**: * If you do not call this endpoint, sessions will automatically expire based on the timeout window defined during onboarding * If you want to end a session before that timeout, you must call this endpoint ```bash cURL theme={null} curl --location --request POST '{{BaseUri}}/api/v2/sessions/{{sessionId}}/cancel' \ --header 'Authorization: Bearer {{access_token}}' ``` ```json 200 - OK theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "referenceId": "USER12345", "status": "Cancelled" } ``` ```json 400 - Bad Request theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Session cannot be Cancelled" } ``` ```json 401 - Unauthorized theme={null} { "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Unauthorized", "status": 401, "detail": "Valid access token required" } ``` ## Response Fields * **sessionId**: unique session identifier for the terminated session * **referenceId**: your internal reference ID (if provided during session creation) * **status**: session status (always `Cancelled` for successful cancellation) * **statusDetails**: additional status context indicating the session was cancelled by API request ## Best Practices ### Session Cleanup * Call this endpoint when users navigate away from the payment flow * Implement cleanup for abandoned sessions in your application * Consider batch cleanup for old active sessions ### Error Handling * Handle cases where the session is already terminated * Implement retry logic for transient network failures * Log cancellation events for audit purposes ## Related Endpoints * [Initiate Session](/api/pay/endpoints/e-transfer/sessions-initiate): create an e-Transfer session * [Session Details](/api/pay/endpoints/e-transfer/sessions-details): retrieve full session information * [/Authorize](/api/pay/endpoints/authorize/authorize): obtain an access token # Session Details Source: https://docs.flinks.com/api/pay/endpoints/e-transfer/sessions-details pay-interac.yaml GET /api/v2/sessions/{sessionId}/details Retrieve comprehensive information about an e-Transfer session, including the verified payor account once the user has authenticated. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Get Session Details Use this endpoint to retrieve the full session state: configuration, payor and payee information, identity matching results, and the current step in the flow. This endpoint provides: * **Session information**: all details from session creation ## Response Structure ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Completed", "referenceId": "USER12345", "amount": 250.00, "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith" }, "payee": { "account": { "institutionCode": "999", "transitNumber": "30265", "accountNumber": "9876541", } }, "schedule": { "transactions": [ { "id": "f6e5d4c3-b2a1-0987-6543-21fedcba0987", "status": "Processed" } ] }, "createdAt": "2026-04-23T12:43:59.203399Z" } ``` ```bash cURL theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ```json 200 - OK theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Completed", "referenceId": "USER12345", "amount": 250.00, "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith" }, "payee": { "account": { "institutionCode": "999", "transitNumber": "30265", "accountNumber": "9876541" } }, "schedule": { "transactions": [ { "id": "f6e5d4c3-b2a1-0987-6543-21fedcba0987", "status": "Processed" } ] }, "createdAt": "2026-04-23T12:43:59.203399Z" } ``` ```json 400 - Bad Request theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Invalid sessionId" } ``` ```json 401 - Unauthorized theme={null} { "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Unauthorized", "status": 401, "detail": "Valid access token required" } ``` ```json 403 - Forbidden theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3", "title": "Forbidden", "status": 403, "detail": "Access denied to session details" } ``` ## Response Fields ### Session Information * **sessionId**: unique session identifier * **status**: current session status (`Initiated`, `Completed`, `Failed`, `Cancelled`, `Expired`) * **step**: current step (`current`, `aggregationRequestId`, `padId`) * **referenceId**: your internal reference ID * **amount**: payment amount (null if not yet set) * **type**: payment type (`e-Transfer` or `EFT`) * **direction**: `CREDIT` or `DEBIT` * **currency**: always `CAD` * **statusDetails**: additional status context when applicable ### Payor * **Personal details**: `firstName`, `lastName`, `email` as provided at session creation ### Payee * **Account details**: destination account information (`institutionCode`, `transitNumber`, `accountNumber`) ### Schedule * **transactions**: list of transactions associated with the session, each with `id` and `status` ## Data Availability Timeline ### Before User Authentication (Status: Initiated) ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Initiated", "amount": 250.00, "referenceId": "USER12345", "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith" }, "schedule": { "transactions": [ { "id": "02a7aa91-810f-4de5-b33f-04a399291fd3", "status": "Processing" } ] }, "createdAt": "2026-04-23T12:43:59.203399Z" } ``` ### After User Authentication (Status: Completed) ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Completed", "amount": 250.00, "referenceId": "USER12345", "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith" }, "schedule": { "transactions": [ { "id": "f6e5d4c3-b2a1-0987-6543-21fedcba0987", "status": "Processed" } ] }, "createdAt": "2026-04-23T12:43:59.203399Z" } ``` ## Use Cases ### Payment Validation * Verify user identity matches bank account holder * Confirm account details for reconciliation ### Audit and Compliance * Complete transaction trail for regulatory requirements * Identity verification documentation ### Customer Support * Comprehensive session information for issue resolution * Complete payment history and status ### Reconciliation * Match payments to internal records using `referenceId` * Account details for settlement verification ## Error Responses Error responses follow the RFC 7807 `ProblemDetails` format. ### Bad Request ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Invalid sessionId" } ``` ### Unauthorized ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Unauthorized", "status": 401, "detail": "Valid access token required" } ``` ### Forbidden ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.3", "title": "Forbidden", "status": 403, "detail": "Access denied to session details" } ``` ## Related Endpoints * [Initiate Session](/api/pay/endpoints/e-transfer/sessions-initiate): create an e-Transfer session * [/Authorize](/api/pay/endpoints/authorize/authorize): obtain an access token # Initiate Session Source: https://docs.flinks.com/api/pay/endpoints/e-transfer/sessions-initiate pay-interac.yaml POST /api/v2/sessions Create a new Interac e-Transfer session and obtain a `sessionId` for launching the user payment flow. To successfully call this endpoint, you must first call the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint to obtain a valid access token. ## Initiate an e-Transfer Session This endpoint creates an e-Transfer (Request For Money) session and returns a `sessionId` that your application uses to launch the hosted user flow: either by redirecting the user to the app URL, loading it in an iframe, or letting Flinks deliver an Interac link by email. ### Authentication Requirements * You must authenticate and obtain a valid `access_token` * Create the session while the token is still valid (599 seconds) * If the token expires, re-authenticate and call this endpoint again ### User Identity Matching The `firstName`, `lastName`, and (optionally) `middleName` fields are used for identity matching against the payor's bank account. They must accurately reflect the person who owns the external account expected to make the payment. **Critical**: If the provided name differs significantly from the name on the linked bank account, the session will fail and the transaction will not be processed. ### Reference ID Best Practices While `referenceId` is not mandatory, it is **strongly recommended**: * In production, it should uniquely identify the end user or transaction in your system * Appears in responses and reconciliation files for easy matching * Makes support requests much easier to resolve * Used in sandbox to trigger specific test scenarios ### Amount Handling **When `amount` is provided** * Value is pre-set for the user * End user cannot modify the amount in the payment flow * Amount cannot be updated during any later phase of the session lifecycle ### Notification Preferences Use `options.notificationPreferences` to control how the end user is notified: * `sendInteracLink`: when `true`, Flinks sends the Interac e-Transfer request link directly to `payor.email`. When `false` (or omitted), you are responsible for distributing the hosted app URL yourself. ### Payor and Payee * **`payor`**: required. Identifies the end user requested to pay. At minimum, include `firstName`, `lastName`, and `email`. * **`payee`**: optional for e-Transfer. When omitted, funds are sent to your configured default settlement account. ### Payee Account (Optional) The `payee.account` object lets you specify which destination account should receive the funds: * **When `payee.account` is provided**: funds are routed to the account you specify (`institutionCode`, `transitNumber`, `accountNumber`). Use this when you need per-session routing (for example, settling to different merchant accounts). * **When `payee.account` is omitted**: Flinks falls back to the default client bank account configured during onboarding. If no default account is configured on your client, the request is rejected. Flinks records the resolved destination account on the session so each transaction remains fully traceable. ### Launching the Payment Flow Once you have a `sessionId`, launch the user flow by directing users to: ```text theme={null} {{BaseUri}}/app/?sessionId={{sessionId}} ``` If `sendInteracLink` is `true`, Flinks will email the link directly to the payor. ```bash cURL theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "amount": 250.00, "options": { "notificationPreferences": { "sendInteracLink": false } }, "payor": { "firstName": "John", "lastName": "Smith", "email": "john.smith@example.com" }, "payee": { "account": { "institutionCode": "999", "transitNumber": "30265", "accountNumber": "9876541" } } }' ``` ```json Body theme={null} { "referenceId": "USER12345", "type": "e-Transfer", "direction": "DEBIT", "currency": "CAD", "amount": 250.00, "options": { "notificationPreferences": { "sendInteracLink": true } }, "payor": { "firstName": "John", "lastName": "Smith", "email": "john.smith@example.com" }, "payee": { "account": { "institutionCode": "999", "transitNumber": "30265", "accountNumber": "9876541" } } } ``` ## Response ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345" } ``` ## Field Specifications ### Character Limits | Field | Limit | Notes | | ------------------------------------- | ------------------ | ---------------------------------------- | | `firstName`, `lastName`, `middleName` | 100 characters | Required for identity matching | | `email` | 100 characters | Used for notifications and link delivery | | `referenceId` | 100 characters | Strongly recommended for tracking | | `accountNumber` | 7 to 12 characters | Numbers only | | `transitNumber` | 5 characters | Numbers only | | `institutionCode` | 3 characters | Numbers only | ## Related Endpoints * [Session Details](/api/pay/endpoints/e-transfer/sessions-details): retrieve full session information * [/Authorize](/api/pay/endpoints/authorize/authorize): obtain an access token # EFT V2 API Overview Source: https://docs.flinks.com/api/pay/endpoints/eft/v2/index API reference for EFT (Electronic Funds Transfer) payments: V2, session-based **Work in progress** This section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities. If you're interested in early access or want to learn more about what's coming, feel free to [reach out to the team](/guides/support/contact-flinks). EFT **V2** replaces V1's endpoint-by-endpoint integration with a single **session-based** flow. You create one session, launch the hosted Flinks Pay experience, and monitor the session to completion. No custom front-end required. Looking for the original endpoints (create transaction, schedules, PAD agreements)? See the [EFT V1 reference](/api/pay/endpoints/eft/index). V2 is the recommended path for new integrations. ## How V2 differs from V1 | | V1 (Direct Transactions) | V2 (Session-based) | | -------------------- | ------------------------------------ | -------------------------------------- | | Integration | Multiple endpoints, custom front-end | One session + hosted UI | | Create call | `POST /api/v1/transactions` | `POST /api/v2/sessions` (`type = EFT`) | | Status model | `EftStatus` / `PaymentStatus` | `SessionStatus` | | Bank account capture | Provided by you | Captured in the hosted flow | This is the **Regular EFT path**. Guarantee features belong to the [GEFT product](/api/pay/endpoints/geft/index). ## Base URLs **Production:** `{{BaseUri}}` **Sandbox:** `{{BaseUri}}` ## Authentication EFT V2 uses the OAuth 2.0 Client Credentials flow: 1. **Authenticate** with Basic auth (Client ID and Secret) at the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. 2. **Receive** a Bearer token valid for 599 seconds (10 minutes). 3. **Use** the Bearer token on all subsequent calls via the `Authorization: Bearer` header. 4. **Refresh** the token before it expires. | Endpoint | Authentication | | ------------------------------------------ | -------------- | | `POST /api/v2/sessions` | Bearer token | | `POST /api/v2/sessions/{sessionId}/cancel` | Bearer token | | `GET /api/v2/sessions/{sessionId}/details` | Bearer token | Session creation requires the **RegularEft** feature to be enabled on your client (otherwise the request returns `403`). ## API Endpoints | Method | Endpoint | Description | | ------ | -------------------------------------- | ----------------------------------------------------------------- | | POST | `/api/v1/authorize` | [Obtain access token](/api/pay/endpoints/authorize/authorize) | | POST | `/api/v2/sessions` | [Initiate session](/api/pay/endpoints/eft/v2/sessions-initiate) | | GET | `/api/v2/sessions/{sessionId}/details` | [Get session details](/api/pay/endpoints/eft/v2/sessions-details) | | POST | `/api/v2/sessions/{sessionId}/cancel` | [Cancel session](/api/pay/endpoints/eft/v2/sessions-cancel) | ## Quick Start ### 1. Authenticate ```bash theme={null} curl --location '{{BaseUri}}/api/v1/authorize' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{clientId:clientSecret}}' \ --data-urlencode 'grant_type=client_credentials' ``` ### 2. Initiate a session ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "payor": { "firstName": "Sara", "lastName": "Ahmad", "email": "sara.ahmad@example.com" }, "options": { "guarantee": { "enable": false } } }' ``` The response returns a `sessionId`: ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345" } ``` ### 3. Launch the user flow ```html theme={null} ``` ### 4. Monitor the session ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ## Session Status Codes | Status | StatusDetails | Description | | ----------- | ------------- | ------------------------------------------------------------------- | | `Initiated` | `EFT0101` | 🟡 Session created, awaiting user start | | `Completed` | `EFT0301` | 🟢 Transaction scheduled, session fully completed | | `Completed` | `EFT0302` | 🟠 Bank account validated, awaiting PAD signature | | `Failed` | `EFT0401` | 🔴 Login failed: invalid financial institution credentials | | `Failed` | `EFT0403` | 🔴 Identity failed: user information did not match the bank account | | `Failed` | `EFT0404` | 🔴 Insufficient available balance | | `Cancelled` | `EFT0501` | ⚫ Session cancelled by API request | | `Expired` | `EFT0601` | ⚫ Session timed out: user inactive or did not complete | Guarantee-related outcomes do not apply to regular EFT. They are specific to [GEFT](/api/pay/endpoints/geft/index). ## Validation Rules * `type` must be `EFT`; `direction` must be `DEBIT`; `currency` must be `CAD` (defaults to `CAD`). * `payor.firstName`, `payor.lastName`, and `payor.email` are **required**. * `payor.address` is **optional** for regular EFT. If provided, address line 1, city, province, postal code, and country are required. * `payee` must be **omitted**: funds settle to your client's configured account. * `referenceId` is optional but recommended; it must be 1 to 36 alphanumeric characters or hyphens. * `amount` is optional; if provided it must be greater than 0, have at most 2 decimal places, and fall within your client's configured minimum/maximum EFT amount. If omitted, the user enters the amount in the hosted flow. ## Next Steps 1. **[Initiate Session](/api/pay/endpoints/eft/v2/sessions-initiate)**: full request and response schema 2. **[Session Details](/api/pay/endpoints/eft/v2/sessions-details)**: retrieve full session information and status # Cancel Active Session Source: https://docs.flinks.com/api/pay/endpoints/eft/v2/sessions-cancel openapi-pay-eft-v2.yaml POST /api/v2/sessions/{sessionId}/cancel Immediately terminate an active EFT session so the user can no longer access or resume the flow. If the session is already in a terminal state (Completed, Cancelled, Expired), the request is rejected. Immediately terminate an active EFT session to prevent further user access or resumption. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Cancel Active Session Use this endpoint to immediately close an active session so the user can no longer access or resume the EFT flow. This is useful when a user abandons the flow in your application and you want to ensure the session cannot be reused. ### When to Use This Endpoint * A user abandons the payment flow in your application * You need to prevent session reuse for security reasons * You want to clean up active sessions before their natural timeout * You are implementing session cleanup workflows ### Authentication Requirements Authenticate with a valid `access_token` from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ### Session Termination Behavior When you call this endpoint with a valid `sessionId`: * **Immediate termination**: the session is terminated immediately. * **Frontend handling**: the hosted front-end behaves as if the session has timed out and displays an appropriate error state. * **Status change**: session status changes to `Cancelled` with status details `EFT0501`. If the session is already in a terminal state (`Completed`, `Cancelled`, or `Expired`), the request is rejected with a `400`. ## Implementation Notes * If you do not call this endpoint, sessions automatically expire based on the timeout window defined during onboarding. * To end a session before that timeout, you must call this endpoint. ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/cancel' \ --header 'Authorization: Bearer {{access_token}}' \ --request POST ``` ## Response ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345", "status": "Cancelled", "statusDetails": "EFT0501" } ``` ## Response Fields * **sessionId**: Unique session identifier for the terminated session * **referenceId**: Your internal reference ID (if provided during session creation) * **status**: Session status (always `Cancelled` for a successful cancellation) * **statusDetails**: Status code `EFT0501`, indicating the session was cancelled by API request ## Status Code Reference | Status | StatusDetails | Description | | ----------- | ------------- | ---------------------------------- | | `Cancelled` | `EFT0501` | ⚫ Session cancelled by API request | ## Error Responses ### Session Already Terminal ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Bad Request", "status": 400, "detail": "Session 850750a4-3021-4061-ac03-a8d873aa4179 cannot be Cancelled" } ``` ### Authentication Required Returned with `401` when the Bearer token is missing or invalid. ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Unauthorized", "status": 401, "detail": "Valid access token required" } ``` ### Session Not Found Returned with `404` when no session matches the provided `sessionId` for your client. ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "detail": "Session not found for client {{clientId}}" } ``` ## Webhook Notification When a session is cancelled, a `SessionSetupStatusChanged` webhook event is sent to your configured subscription: ```json theme={null} { "when": "2026-06-08T14:36:48.6078123Z", "payload": { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "amount": 100.00, "referenceId": "USER12345", "status": "Cancelled", "statusDetails": "EFT0501" }, "type": "SessionSetupStatusChanged" } ``` ## Best Practices ### Session Cleanup * Call this endpoint when users navigate away from the payment flow * Implement cleanup for abandoned sessions in your application ### Error Handling * Handle cases where the session is already terminal * Implement retry logic for transient network failures * Log cancellation events for audit purposes ## Use Cases ### User Abandonment ```javascript theme={null} // User navigates away from the payment page window.addEventListener('beforeunload', async function() { if (activeSessionId && !paymentCompleted) { await cancelSession(activeSessionId); } }); ``` ### Timeout Management ```javascript theme={null} // Cancel a session before its natural timeout async function handleSessionTimeout(sessionId) { try { await cancelSession(sessionId); } catch (error) { console.error('Failed to cancel session:', error); } } ``` ## Related Endpoints * [Initiate Session](/api/pay/endpoints/eft/v2/sessions-initiate): create an EFT payment session * [Get Session Details](/api/pay/endpoints/eft/v2/sessions-details): retrieve comprehensive session information # Session Details Source: https://docs.flinks.com/api/pay/endpoints/eft/v2/sessions-details openapi-pay-eft-v2.yaml GET /api/v2/sessions/{sessionId}/details Retrieve comprehensive session information including verified payor account details (once available). Payor account details are populated only after the session passes the `Initiated` stage. `payee` is always `null`. Funds settle to your configured account. Retrieve comprehensive session information, including verified payor account details. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Get Session Details Use this endpoint to retrieve full session information along with the verified payor account details captured during the hosted flow. ### Availability of Account Details **Important**: Payor account details become available only after the session has passed the `Initiated` stage. Before that point, `payor.account` is returned as `null`. `payee` is always `null`: funds settle to your client's configured account. ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ## Response Structure ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "status": "Completed", "step": { "current": "Complete", "aggregationRequestId": "c1a2b3d4-e5f6-7890-abcd-ef1234567890", "padId": "d4c3b2a1-f6e5-0987-dcba-fe7654321098" }, "referenceId": "USER12345", "amount": 100.00, "type": "EFT", "direction": "DEBIT", "currency": "CAD", "options": { "guarantee": { "enable": false }, "showConsentScreen": false, "limits": { "minimumAmount": 50.00, "maximumAmount": 10000.00 }, "amountModification": true, "redirectPreferences": { "mode": "JsEvents" } }, "payor": { "email": "sara.ahmad@example.com", "firstName": "Sara", "lastName": "Ahmad", "account": { "institutionCode": "003", "transitNumber": "12345", "accountNumber": "****1234", "accountLabel": "Checking (****1234)" }, "address": { "addressLine1": "123 Street", "city": "Toronto", "province": "ON", "country": "CA", "postalCode": "M5H2N2" } }, "userDetails": { "matchingPerformed": true, "nameMatch": 95 }, "createdAt": "2026-06-04T14:30:00Z" } ``` ## Response Fields ### Session Information * **sessionId**: Unique session identifier * **status**: Current session status * **step**: Current step of the session flow, an object with `current`, `aggregationRequestId`, and `padId`. Possible `current` values: * `Start`: session opened; user has entered the flow * `Consent`: Flinks consent screen (when `showConsentScreen` is enabled) * `BankSelection`: user is choosing their financial institution * `BankConnection`: user is logging into / connecting their bank * `AccountSelection`: user is selecting which account to use * `AmountSelection`: user is entering the amount (skipped when `amount` is preset) * `Review`: user reviews the payment details * `Pad`: user reviews and signs the PAD agreement * `Complete`: flow finished * **referenceId**: Your internal reference ID * **amount**: Payment amount (null if not yet set) * **type**: Payment type (always `EFT`) * **direction**: Payment direction (always `DEBIT`) * **currency**: Payment currency (always `CAD`) ### Options * **guarantee.enable**: Whether a guarantee was requested (always `false` for regular EFT) * **notificationPreferences.language**: Language preference (`EN` or `FR`) * **showConsentScreen**: Whether the Flinks consent screen is displayed * **limits**: Minimum and maximum allowed payment amounts * **amountModification**: Whether the user can modify the amount * **redirectPreferences**: Redirect mode and URLs for session completion ### Payor Information * **Personal details**: firstName, lastName, middleName, email as provided during session creation * **Verified account**: Bank account information obtained after user authentication (institutionCode, transitNumber, accountNumber, accountLabel). Account numbers are masked, showing only the last 4 digits. * **Address**: Street address, city, province, country, postal code ### Payee Information * **payee**: Always `null` for EFT. Funds settle to your configured account. ### User Details * **matchingPerformed**: Whether identity matching was performed * **nameMatch**: Name matching score (0 to 100) ## Data Availability Timeline ### Before user authentication (Status: Initiated) ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "status": "Initiated", "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "sara.ahmad@example.com", "firstName": "Sara", "lastName": "Ahmad", "account": null }, "payee": null } ``` ### After user authentication (Status: Completed/Failed) ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "status": "Completed", "payor": { "email": "sara.ahmad@example.com", "firstName": "Sara", "lastName": "Ahmad", "account": { "institutionCode": "003", "transitNumber": "12345", "accountNumber": "****1234", "accountLabel": "Checking (****1234)" } } } ``` ## Status Values The `status` field reflects the session's progress. Retrieve this endpoint until the session reaches a terminal state (`Completed`, `Failed`, `Cancelled`, or `Expired`). | Status | Description | | ----------- | -------------------------------------------------------------------- | | `Initiated` | 🟡 Session created; the user has not yet completed the flow | | `Completed` | 🟢 Session completed: PAD signed and EFT transaction scheduled | | `Failed` | 🔴 Session failed (for example, a login, identity, or balance issue) | | `Cancelled` | ⚫ Session cancelled by API request | | `Expired` | ⚫ Session timed out: user inactive or did not complete | Guarantee-related outcomes do not apply to regular EFT. They are specific to [GEFT](/api/pay/endpoints/geft/index). ## Use Cases ### Payment Validation * Verify the user's identity matches the bank account holder * Confirm account details for reconciliation * Confirm the session reached a terminal state before processing ### Audit and Compliance * Complete transaction trail for regulatory requirements * Identity verification documentation * Account verification records ### Customer Support * Comprehensive session information for issue resolution * Account details for payment troubleshooting * Complete payment status ### Reconciliation * Match payments to internal records using `referenceId` * Account details for settlement verification * Complete payment lifecycle information ## Error Responses ### Session Not Found Returned with `404` when no session matches the provided `sessionId`. ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "detail": "Session not found" } ``` ### Authentication Required Returned with `401` when the Bearer token is missing or invalid. ```json theme={null} { "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Unauthorized", "status": 401, "detail": "Valid access token required" } ``` ## Security Considerations ### Data Protection * **Account numbers**: masked for security (showing only the last 4 digits) * **Personal information**: handle according to privacy regulations * **Access controls**: ensure proper authentication and authorization ### Compliance * **Data retention**: follow regulatory requirements for payment data * **Audit trails**: maintain complete records for compliance * **Privacy**: protect customer personal and financial information ## Best Practices ### When to Call This Endpoint * **After a status change**: when you detect a session update (for example, via webhook) * **For reconciliation**: during end-of-day processing * **For support**: when investigating payment issues * **For compliance**: when audit trails are required ### Data Handling * **Cache appropriately**: avoid excessive API calls * **Secure storage**: protect sensitive account information * **Access logging**: log all access to session details ## Related Endpoints * [Initiate Session](/api/pay/endpoints/eft/v2/sessions-initiate): create an EFT payment session * [Cancel Session](/api/pay/endpoints/eft/v2/sessions-cancel): terminate an active session # Initiate Session Source: https://docs.flinks.com/api/pay/endpoints/eft/v2/sessions-initiate openapi-pay-eft-v2.yaml POST /api/v2/sessions Create a new EFT session and obtain a `sessionId` for launching the user payment flow. For regular EFT, set `type` to `EFT` and `options.guarantee.enable` to `false`. Funds settle to your client's configured bank account. `payee` is not supported for EFT. Requires the `RegularEft` feature to be enabled on your client (otherwise `403`). Create a new EFT session and obtain a `sessionId` for launching the user payment flow. To successfully call this endpoint, you must first call the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint to obtain a valid access token. ## Initiate an EFT Session This endpoint creates a session on the **Regular EFT path** and returns a `sessionId` that your application uses to launch the hosted Flinks Pay flow: either by redirecting the user to the app URL or loading it in an iframe. Set `type` to `EFT` and `options.guarantee.enable` to `false`. Funds settle to your client's configured bank account, so **`payee` is not supported** for EFT. ### Authentication Requirements * You must authenticate and obtain a valid `access_token` from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. * Create the session while the token is still valid (599 seconds). If it expires, re-authenticate and call this endpoint again. * Your client must have the **RegularEft** feature enabled. If it is not, the request returns `403 Forbidden`. ### User Identity Matching `firstName` and `lastName` are used for identity matching against the payor's bank account. They must accurately reflect the person who owns the external account expected to make the payment. **Critical**: If the provided name differs significantly from the name on the linked bank account, the session will return an error (`EFT0403`) and the transaction will not be processed. ### Reference ID Best Practices While `referenceId` is not mandatory, it is **strongly recommended**: * It should uniquely identify the end user or transaction in your system. * It appears in responses and reconciliation files for easy matching. * For EFT it flows through as the cross-reference number, so it must be **1 to 36 alphanumeric characters or hyphens**. ### Amount Handling * **When `amount` is provided**: the value is pre-set and the user cannot modify it in the flow. It must fall within your client's configured minimum/maximum EFT amount. * **When `amount` is omitted**: the user enters the amount during the hosted flow. ### Payor Address `payor.address` is **optional** for regular EFT. If you include it, address line 1, city, province, postal code, and country are required. (An address is only mandatory for Guaranteed EFT.) ### Launching the Payment Flow Once you have a `sessionId`, launch the user flow by directing users to: ``` {{BaseUri}}/app/?sessionId={{sessionId}} ``` ## Request Example ```bash cURL (minimum) theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "payor": { "firstName": "Sara", "lastName": "Ahmad", "email": "sara.ahmad@example.com" }, "options": { "guarantee": { "enable": false } } }' ``` ```bash cURL (with optional fields) theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "amount": 100.00, "options": { "guarantee": { "enable": false }, "notificationPreferences": { "language": "EN" }, "showConsentScreen": false }, "payor": { "firstName": "Sara", "lastName": "Ahmad", "email": "sara.ahmad@example.com", "address": { "addressLine1": "123 Street", "city": "Toronto", "postalCode": "M5H2N2", "province": "ON", "country": "CA" } } }' ``` ## Response ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345" } ``` ## Field Specifications ### Character Limits | Field | Limit | Notes | | ----------------------- | ------------------ | -------------------------------- | | `firstName`, `lastName` | 100 characters | Required for identity matching | | `email` | 100 characters | Required; used for notifications | | `referenceId` | 1 to 36 characters | Alphanumeric and hyphens only | | `postalCode` | 6 characters | No spaces (e.g., M5H2N2) | | `province` | 2 characters | Provincial code (e.g., ON, QC) | | `country` | 2 characters | Only `CA` supported | ### Supported Province Codes AB, BC, MB, NB, NL, NT, NS, NU, ON, PE, QC, SK, YT ## Related Endpoints * [Get Session Details](/api/pay/endpoints/eft/v2/sessions-details): retrieve comprehensive session information * [Cancel Session](/api/pay/endpoints/eft/v2/sessions-cancel): terminate an active session # Confirm Guarantee Source: https://docs.flinks.com/api/pay/endpoints/geft/guarantee-confirm POST /api/v2/sessions/{sessionId}/guarantees/confirm Accept or reject a guarantee for a GEFT session. Used in conjunction with the webhook system to explicitly confirm or decline a guarantee before completing a session. The Guarantee Decision feature introduces a new step in the Guaranteed EFT flow, allowing clients to explicitly accept or reject a guarantee before completing a session. This provides better control and transparency in the payment guarantee process for the client. ```mermaid theme={null} flowchart TD A([Session initiated]) -- (...) --> B[Request Guarantee New Guarantee Emitted] B --> C{Is webhook setup?} C -- Yes --> D[Waiting on client to accept/reject guarantee] D --> E{Client calls decision endpoint} E -- rejection --> F([No webhook delivery confirmation]) F --> G[Session Failed] E -- accept --> H[Session ready to be completed] C -- No --> I[Auto accept the guarantee] I --> H ``` To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Implementation Notes This endpoint should ideally be used in association with our webhook system. Once a new guarantee is emitted, the system sends a webhook event to the url configured. (please, ask your Flinks representative for more details). Once the event is propagated to your system, you can then use this endpoint to share the decision on this session. ### Guaranteee Confirmation Behavior If a webhook is configured for this event, after three unsuccessful attempt of delivery the event, the session automatically fails. If no webhook is configured, all emitted guarantee are always considered as auto accepted by the client. ## The Guarantee Offer Before calling this endpoint, the client receives a guarantee offer to review. It is delivered through the guarantee webhook event and is also available from [Get Session Details](/api/pay/endpoints/geft/sessions-details) in the `guaranteeDetails` object. The client evaluates this offer, then accepts or rejects it through this endpoint. ```json theme={null} { "guaranteeDetails": { "guaranteeOffered": true, "guaranteeAccepted": null, "highestDebitAmountToGuarantee": 1500.00, "overallRiskLevel": "Medium", "transactionRiskLevel": "Low", "userRiskLevel": "Medium", "otherRiskLevel": "Low", "guaranteedEftType": "Full" }, "userDetails": { "matchingPerformed": true, "nameMatch": 0.98 }, "referenceId": "order-12345", "amount": 2000.00, "sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6" } ``` ### Guarantee Offer Fields * **guaranteeOffered** = whether a guarantee is being offered for this session * **guaranteeAccepted** = null until the client answers through this endpoint * **highestDebitAmountToGuarantee** = the maximum amount that can be guaranteed (for Partial or Minimal types this can be lower than the requested amount) * **guaranteedEftType** = one of Full, Partial, or Minimal * **overallRiskLevel**, **transactionRiskLevel**, **userRiskLevel**, **otherRiskLevel** = one of Unknown, Low, Medium, High, Low\_Medium, or Medium\_High * **userDetails.matchingPerformed** and **userDetails.nameMatch** = whether identity name-matching ran and the resulting match score ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/guarantees/confirm' \ --header 'Authorization: Bearer {{access_token}}' \ --request POST --data-raw '{ "guaranteeAccepted": "true | false" }' ``` ## Response ```json theme={null} { "sessionId": "86095db9-7cb4-4121-a6ca-9d64368c6463", "referenceId": "d858dd37-3e98-4e00-accc-5f54b1d8c369" } ``` ## Response Fields * **sessionId**: Unique session identifier for the terminated session * **referenceId**: optional information given during the session initiation ## Error Responses ### Session Not Found ```json theme={null} { "error": "not_found", "error_description": "No Session found for the reference {{sessionId}}" } ``` ### Authentication Required ```json theme={null} { "error": "unauthorized", "error_description": "Valid access token required" } ``` ## Related Endpoints * [Create Session](/api/pay/endpoints/geft/sessions-initiate) - Initialize GEFT payment session * [Get Session Details](/api/pay/endpoints/geft/sessions-details) - Retrieve comprehensive session information # GEFT API Overview Source: https://docs.flinks.com/api/pay/endpoints/geft/index Complete API reference for GEFT (Guaranteed Electronic Funds Transfer) payments The GEFT (Guaranteed Electronic Funds Transfer) API provides enterprise-grade payment processing with guaranteed settlement for EFT transactions. This API reference covers all endpoints needed to integrate GEFT payments. ## Base URLs **Production:** `{{BaseUri}}` **Sandbox:** `{{BaseUri}}` ## Authentication All GEFT API requests use OAuth 2.0 Client Credentials flow: 1. **Authenticate** with Basic auth using Client ID and Secret 2. **Receive** Bearer token valid for 599 seconds (10 minutes) 3. **Use** Bearer token for all subsequent API calls 4. **Refresh** token before expiration ## API Endpoints ### Authentication | Method | Endpoint | Description | | ------ | ------------------- | ------------------------------------------------------------- | | POST | `/api/v1/authorize` | [Obtain access token](/api/pay/endpoints/authorize/authorize) | ### Session Management | Method | Endpoint | Description | | ------ | ------------------------------------------------- | ----------------------------------------------------------------------- | | POST | `/api/v2/sessions` | [Create GEFT session](/api/pay/endpoints/geft/sessions-initiate) | | GET | `/api/v2/sessions/{sessionId}/details` | [Get session details](/api/pay/endpoints/geft/sessions-details) | | POST | `/api/v2/sessions/{sessionId}/guarantees/confirm` | [Confirm Guarantee Decision](/api/pay/endpoints/geft/guarantee-confirm) | | POST | `/api/v2/sessions/{sessionId}/cancel` | [Cancel session](/api/pay/endpoints/geft/sessions-cancel) | ## Quick Start ### 1. Authenticate ```bash theme={null} curl --location '{{BaseUri}}/api/v1/authorize' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{Username:Password}}' \ --data-urlencode 'grant_type=client_credentials' ``` ### 2. Create Session ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "options": { "guarantee": { "enable": true } }, "payor": { "firstName": "John", "lastName": "Smith", "address": { "addressLine1": "123 street", "city": "Toronto", "postalCode": "h2eh2e", "province": "ON", "country": "CA" } } }' ``` ### 3. Launch User Flow ```html theme={null} ``` ### 4. Monitor the Session ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ## Session Object ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345", "amount": 500.00, "status": "Completed", "statusDetails": "EFT0301" } ``` ## Status Codes ### Session Status Values | Status | StatusDetails | Description | | ----------- | ------------- | -------------------------------------------------------- | | `Initiated` | `EFT0101` | Session created, awaiting user start | | `Completed` | `EFT0301` | Transaction scheduled, session fully completed | | `Completed` | `EFT0302` | Bank account validated, awaiting PAD signature | | `Failed` | `EFT0401` | Login failed - invalid financial institution credentials | | `Failed` | `EFT0402` | Eligibility failed - no guaranteed EFT offered | | `Failed` | `EFT0403` | Identity failed - invalid user information verification | | `Canceled` | `EFT0501` | Session canceled by API request | | `Expired` | `EFT0601` | Session timed out - user inactive or did not complete | ### Status Meanings **EFT0101 - Session Created**: A SessionId has been created and Flinks is awaiting for the user to start the session. **EFT0301 - Transaction Scheduled**: The user has successfully completed the session and a transaction schedule has been instructed. User is fully complete - transaction information can be checked for status of the schedule. This relates to an EFT transaction being instructed. **EFT0302 - Bank Account Validated**: The user has successfully validated their account (if required) - however, Flinks is awaiting the user to sign the PAD. **EFT0401 - Login Failed**: The user was not able to successfully login to their Financial Institution (received an invalid login). **EFT0402 - Eligibility Failed**: The user was not offered a Guaranteed EFT because of their account information (for example NSF or overall risk). Refer to reconciliation or the /Guarantees endpoint for more information. **EFT0403 - Identity Failed**: Invalid user information from their Financial Institution did not match provided user information, hence the session has failed. **EFT0501 - Session Canceled**: A call to the `/Sessions/Cancel` endpoint was made with the associated SessionId. **EFT0601 - Session Timed Out**: The sessionId timed-out before the user completed the session. ## Field Specifications ### Character Limits | Field | Limit | Notes | | ----------------------- | --------------------------- | ----------------------------------- | | `firstName`, `lastName` | 100 characters | Required for identity matching | | `email` | 100 characters | Used for notifications | | `phone` | 15 characters | Numbers only, no special characters | | `referenceId` | 100 characters | Strongly recommended for tracking | | `addressLine1` | 100 characters | Street address | | `city` | 100 characters | Full city name | | `postalCode` | 6 characters | No spaces (e.g., M5V0T7) | | `province` | 2 characters | Provincial code (e.g., ON, QC) | | `country` | 2 characters | Only "CA" supported | | `accountNumber` | Between 7 and 12 characters | Numbers only | | `transitNumber` | 5 characters | Numbers only | | `institutionCode` | 3 characters | Numbers only | ### Validation Rules **Amount:** * Maximum: \$99,999.99 (default) * Minimum: Client-configurable * Decimal places: Up to 2 **Currency:** * Only "CAD" supported **Province Codes:** * AB (Alberta), BC (British Columbia), MB (Manitoba) * NB (New Brunswick), NL (Newfoundland and Labrador) * NT (Northwest Territories), NS (Nova Scotia), NU (Nunavut) * ON (Ontario), PE (Prince Edward Island), QC (Quebec) * SK (Saskatchewan), YT (Yukon) **Phone Numbers:** * Numbers only * No country codes, spaces, or special characters * Example: "5551234567" (not "+1-555-123-4567") ## Payment Processing ### EFT Processing Windows GEFT follows Payments Canada EFT processing schedule: | Window | Cutoff Time | Submission Time | Days | | -------- | ----------- | --------------- | ------- | | Window 1 | 2:30am EDT | 9:30am EDT | Mon-Fri | | Window 2 | 1:30pm EDT | 4:30pm EDT | Mon-Fri | | Window 3 | 6:00pm EDT | 9:00pm EDT | Mon-Fri | **Weekend/Holiday Processing:** No processing on weekends or holidays. **Settlement Timeline:** Payments created before a cutoff are delivered approximately 2 hours after the next submission window. ### Destination Account Logic GEFT supports flexible destination account routing: 1. **With payee object**: Funds settle to specified account 2. **Without payee object**: Funds settle to your configured default account 3. **No payee + no default**: Request rejected with error ### Payment Instructions When a guarantee is accepted, Flinks issues: 1. **EFT credit** from Flinks float account to your destination account 2. **EFT debit** from end-user's account to Flinks float account The EFT credit to your account is the key status for settlement confirmation. ## Frontend Integration ### iFrame URL Pattern ``` {{BaseUri}}/app/?sessionId={{sessionId}} ``` ### Event Monitoring ```javascript theme={null} window.addEventListener('message', function(e) { console.log('GEFT Event:', e.data); if (e.data.Step === 'SUCCESS') { // Payment completed successfully } else if (e.data.Step === 'GUARANTEE_FAILED') { // Guarantee declined, offer alternatives } }); ``` ## Error Handling ### API Errors **Authentication Failed:** ```json theme={null} { "error": "invalid_client", "error_description": "Invalid client credentials" } ``` **Invalid Request:** ```json theme={null} { "error": "invalid_request", "error_description": "Missing required field: firstName" } ``` **Session Not Found:** ```json theme={null} { "error": "not_found", "error_description": "Session not found" } ``` ### Common Integration Issues 1. **Token Expiration**: Access tokens expire after 599 seconds 2. **Name Mismatch**: User info must match bank account holder 3. **Amount Limits**: Respect min/max amount configurations 4. **Character Limits**: Validate field lengths before submission ## Rate Limits API endpoints have the following rate limits: * **Authentication**: 60 requests per minute * **Session Creation**: 100 requests per minute * **Status Queries**: 1000 requests per minute Rate limit headers are included in responses: ``` X-RateLimit-Limit: 100 X-RateLimit-Remaining: 95 X-RateLimit-Reset: 1647360000 ``` ## Testing Use the sandbox environment for integration testing: * **Test Scenarios**: Happy1, Happy2, Happy3, Unhappy1, Unhappy7, Unhappy8 * **Credentials**: Provided during onboarding * **Test Data**: Predefined user profiles and expected outcomes See [Sandbox Guide](/guides/pay/geft/sandbox-overview) for complete testing procedures. ## Support **Technical Support:** * Contact your Technical Account Manager * Reference session IDs and timestamps in support requests * Include relevant API request/response data **Documentation:** * [Setup Guide](/guides/pay/geft/setup-flinks-pay) * [Event Handling](/guides/pay/geft/event-handling) * [Sandbox Guide](/guides/pay/geft/sandbox-overview) ## Next Steps 1. **[Authentication](/api/pay/endpoints/authorize/authorize)**: Set up API authentication 2. **[Session Creation](/api/pay/endpoints/geft/sessions-initiate)**: Create and manage sessions 3. **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Complete implementation walkthrough # Cancel Active Session Source: https://docs.flinks.com/api/pay/endpoints/geft/sessions-cancel POST /api/v2/sessions/{sessionId}/cancel Immediately terminate an active GEFT session to prevent further user access or resumption. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Cancel Active Session Use this endpoint to immediately close an active session so the user can no longer access or resume the Guaranteed EFT flow. This is useful when a user abandons the flow in your application and you want to ensure the session cannot be reused. ### When to Use This Endpoint * User abandons the payment flow in your application * Need to prevent session reuse for security reasons * Want to clean up active sessions before their natural timeout * Implementing session cleanup workflows ### Session Termination Behavior When you call this endpoint with a valid sessionId: * **Immediate termination**: The session is terminated immediately * **Frontend handling**: The hosted front-end will behave as if the session has timed out and display an appropriate error state * **Status change**: Session status changes to "Canceled" with status details "EFT0501" ## Implementation Notes **Recommended but not required**: * If you do not call this endpoint, sessions will automatically expire based on the timeout window defined during onboarding * If you want to end a session before that timeout, you must call this endpoint ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/cancel' \ --header 'Authorization: Bearer {{access_token}}' \ --request POST ``` ## Response ```json theme={null} { "sessionId": "86095db9-7cb4-4121-a6ca-9d64368c6463", "referenceId": "Happy2", "status": "Canceled", "statusDetails": "EFT0501" } ``` ## Response Fields * **sessionId**: Unique session identifier for the terminated session * **referenceId**: Your internal reference ID (if provided during session creation) * **status**: Session status (always "Canceled" for successful cancellation) * **statusDetails**: Status code "EFT0501" indicating session was canceled by API request ## Status Code Reference | Status | StatusDetails | Description | | ---------- | ------------- | --------------------------------- | | `Canceled` | `EFT0501` | ⚫ Session canceled by API request | ## Error Responses ### Session Not Found ```json theme={null} { "error": "not_found", "error_description": "Session not found for client {{clientId}}" } ``` ### Authentication Required ```json theme={null} { "error": "unauthorized", "error_description": "Valid access token required" } ``` ### Session Already Terminal ```json theme={null} { "error": "invalid_request", "error_description": "Session {{sessionId}} cannot be Cancelled" } ``` ## Webhook Notification When a session is successfully canceled, a webhook event is triggered: ```json theme={null} { "when": "2025-11-18T14:36:48.6078123Z", "payload": { "sessionId": "c14b050b-6268-4f5c-9c73-80713c80edb3", "amount": 65, "referenceId": "Happy1", "status": "Canceled", "statusDetails": "EFT0501" }, "type": "SessionSetupStatusChanged" } ``` ## Best Practices ### Session Cleanup * Call this endpoint when users navigate away from payment flow * Implement cleanup for abandoned sessions in your application * Consider batch cleanup for old active sessions ### Error Handling * Handle cases where session is already terminated * Implement retry logic for network failures * Log cancellation events for audit purposes ### User Experience * Provide clear messaging when canceling sessions * Allow users to restart payment flow after cancellation * Maintain session state in your application for recovery ## Use Cases ### User Abandonment ```javascript theme={null} // User navigates away from payment page window.addEventListener('beforeunload', async function() { if (activeSessionId && !paymentCompleted) { await cancelSession(activeSessionId); } }); ``` ### Timeout Management ```javascript theme={null} // Cancel session before natural timeout async function handleSessionTimeout(sessionId) { try { await cancelSession(sessionId); console.log('Session cleaned up successfully'); } catch (error) { console.error('Failed to cancel session:', error); } } ``` ### Security Cleanup ```javascript theme={null} // Batch cleanup of abandoned sessions async function cleanupAbandonedSessions(sessionIds) { const results = await Promise.allSettled( sessionIds.map(id => cancelSession(id)) ); const successful = results.filter(r => r.status === 'fulfilled'); console.log(`Cleaned up ${successful.length} sessions`); } ``` ## Related Endpoints * [Create Session](/api/pay/endpoints/geft/sessions-initiate) - Initialize GEFT payment session * [Get Session Details](/api/pay/endpoints/geft/sessions-details) - Retrieve comprehensive session information # Session Details Source: https://docs.flinks.com/api/pay/endpoints/geft/sessions-details GET /api/v2/sessions/{sessionId}/details Retrieve comprehensive session information including verified payor account details. To successfully call this endpoint, you must have a valid access token from the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. ## Get Session Details Use this endpoint to retrieve full, verified payor account information along with all session-level details required for payment validation. ### Availability of Account Details **Important**: Payor account details become available only after the session has passed the "Initiated" stage. Before that point, the payor account section will be returned empty. This endpoint provides: * **Complete session information**: All details from session creation * **Verified account details**: Bank account information after user authentication * **Payment validation data**: Information needed for transaction processing * **Identity verification results**: User identity matching status ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions/{{sessionId}}/details' \ --header 'Authorization: Bearer {{access_token}}' ``` ## Response Structure The response includes comprehensive session information and, once available, detailed payor account verification data: ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Completed", "step": { "current": "Complete", "aggregationRequestId": "c1a2b3d4-e5f6-7890-abcd-ef1234567890", "padId": "d4c3b2a1-f6e5-0987-dcba-fe7654321098" }, "referenceId": "USER12345", "amount": 500.00, "type": "EFT", "direction": "DEBIT", "currency": "CAD", "options": { "guarantee": { "enable": true }, "showConsentScreen": true, "limits": { "minimumAmount": 10, "maximumAmount": 1000 } }, "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith", "account": { "institutionCode": "014", "transitNumber": "58964", "accountNumber": "1234567", "accountLabel": "Account (****4567)" }, "address": { "addressLine1": "123 Main Street", "city": "Toronto", "province": "ON", "country": "CA", "postalCode": "M5V3A8" } }, "payee": { "account": { "institutionCode": "999", "transitNumber": "30265", "accountNumber": "9876541", "accountLabel": "Settlement Account" } }, "guaranteeDetails": { "guaranteeOffered": true, "guaranteeAccepted": true, "highestDebitAmountToGuarantee": 500.00, "overallRiskLevel": "Low", "transactionRiskLevel": "Low", "userRiskLevel": "Low", "otherRiskLevel": "Unknown", "guaranteedEftType": "Full" }, "userDetails": { "matchingPerformed": true, "nameMatch": 95 } } ``` ## Response Fields ### Session Information * **sessionId**: Unique session identifier * **status**: Current session status * **step**: Current step of the session flow, an object with `current`, `aggregationRequestId`, and `padId`. Possible `current` values: * `Start`: session opened; user has entered the flow * `Consent`: Flinks consent screen (when `showConsentScreen` is enabled) * `BankSelection`: user is choosing their financial institution * `BankConnection`: user is logging into / connecting their bank * `AccountSelection`: user is selecting which account to use * `AmountSelection`: user is entering the amount (skipped when `amount` is preset) * `GuaranteeOffer`: guarantee offer presented to the user * `Review`: user reviews the payment details * `Pad`: user reviews and signs the PAD agreement * `Complete`: flow finished * **referenceId**: Your internal reference ID * **amount**: Payment amount (null if not yet set) * **type**: Payment type (always "EFT" for GEFT) * **direction**: Payment direction (always "DEBIT" for GEFT) * **currency**: Payment currency (always "CAD") ### Options * **guarantee.enable**: Whether a guarantee was requested * **notificationPreferences.language**: Language preference ("EN" or "FR") * **showConsentScreen**: Whether Flinks consent screen is displayed * **limits**: Minimum and maximum allowed payment amounts * **amountModification**: Whether the user can modify the amount * **redirectPreferences**: Redirect mode and URLs for session completion ### Payor Information * **Personal details**: Name (firstName, lastName, middleName), email as provided during session creation * **Verified account**: Bank account information obtained after user authentication (institutionCode, transitNumber, accountNumber, accountLabel, availableBalance) * **Address**: Street address, city, province, country, postal code ### Payee Information * **Account details**: Destination account information (institutionCode, transitNumber, accountNumber, accountLabel) ### Guarantee Details * **guaranteeOffered**: Whether a guarantee was offered * **guaranteeAccepted**: Whether the guarantee was accepted (null if not yet decided) * **highestDebitAmountToGuarantee**: Maximum debit amount eligible for guarantee * **Risk levels**: overallRiskLevel, transactionRiskLevel, userRiskLevel, otherRiskLevel (Unknown, Low, Medium, High) * **guaranteedEftType**: Type of guarantee coverage (Full, Partial, Minimal) ### User Details * **matchingPerformed**: Whether identity matching was performed * **nameMatch**: Name matching score (0 to 100) ## Data Availability Timeline ### Before User Authentication (Status: Initiated) ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Initiated", "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith", "account": null } } ``` ### After User Authentication (Status: Completed/Failed) ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "status": "Completed", "payor": { "email": "john.smith@example.com", "firstName": "John", "lastName": "Smith", "account": { "institutionCode": "003", "transitNumber": "12345", "accountNumber": "****1234", "accountLabel": "Checking (****1234)" } } } ``` ## Use Cases ### Payment Validation * Verify user identity matches bank account holder * Confirm account details for reconciliation * Validate guarantee status before processing ### Audit and Compliance * Complete transaction trail for regulatory requirements * Identity verification documentation * Account verification records ### Customer Support * Comprehensive session information for issue resolution * Account details for payment troubleshooting * Complete payment history and status ### Reconciliation * Match payments to internal records using referenceId * Account details for settlement verification * Complete payment lifecycle information ## Error Responses ### Session Not Found ```json theme={null} { "error": "not_found", "error_description": "Session not found" } ``` ### Authentication Required ```json theme={null} { "error": "unauthorized", "error_description": "Valid access token required" } ``` ### Insufficient Permissions ```json theme={null} { "error": "forbidden", "error_description": "Access denied to session details" } ``` ## Security Considerations ### Data Protection * **Account numbers**: Masked for security (showing only last 4 digits) * **Personal information**: Handle according to privacy regulations * **Access controls**: Ensure proper authentication and authorization ### Compliance * **Data retention**: Follow regulatory requirements for payment data * **Audit trails**: Maintain complete records for compliance * **Privacy**: Protect customer personal and financial information ## Best Practices ### When to Call This Endpoint * **After status changes**: When polling shows status updates * **For reconciliation**: During end-of-day processing * **For support**: When investigating payment issues * **For compliance**: When audit trails are required ### Data Handling * **Cache appropriately**: Avoid excessive API calls * **Secure storage**: Protect sensitive account information * **Access logging**: Log all access to session details ## Status Values The `status` field reflects the session's progress. Retrieve this endpoint until the session reaches a terminal state (`Completed`, `Failed`, `Canceled`, or `Expired`). | Status | Description | | ----------- | ----------------------------------------------------------- | | `Initiated` | 🟡 Session created; the user has not yet completed the flow | | `Completed` | 🟢 Session completed | | `Failed` | 🔴 Session failed | | `Canceled` | ⚫ Session canceled by API request | | `Expired` | ⚫ Session timed out - user inactive or did not complete | ## Related Endpoints * [Create Session](/api/pay/endpoints/geft/sessions-initiate) - Initialize GEFT payment session * [Cancel Session](/api/pay/endpoints/geft/sessions-cancel) - Terminate active session # Initiate Session Source: https://docs.flinks.com/api/pay/endpoints/geft/sessions-initiate POST /api/v2/sessions Create a new GEFT session and obtain a sessionId for launching the user payment flow. To successfully call this endpoint, you must first call the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint to obtain a valid access token. ## Create a GEFT Session This endpoint creates a GEFT session and returns a `sessionId` that your application uses to launch the GEFT user flow in the hosted iFrame. ### Authentication Requirements * You must authenticate and obtain a valid `access_token` * Create the session while the token is still valid (599 seconds) * If the token expires, re-authenticate and call this endpoint again ### Destination Account Logic GEFT supports routing payments to different destinations: * **With payee object**: Funds are settled to the specified account * **Without payee object**: Flinks automatically uses your client's configured settlement account * **No payee + no settlement account configured**: Request will be rejected with an error Flinks records the resolved destination account in the session so each transaction remains fully traceable. ### User Identity Matching Fields such as `firstName` and `lastName` are used for identity matching against the external bank account. They must accurately reflect the person who owns the external account expected to make the payment. **Critical**: If the provided name differs significantly from the name on the linked bank account, the session will return an error (EFT0403) and the transaction will not be processed. ### Reference ID Best Practices While `referenceId` is not mandatory, it is **strongly recommended**: * In production, should uniquely identify the end user or transaction in your system * Appears in responses and reconciliation files for easy matching * Makes support requests much easier to resolve * Used in sandbox to trigger specific test scenarios ### Amount Handling **When amount is provided:** * Value is pre-set for the user * End user cannot modify the amount in the payment flow * "Enter an amount" step is displayed grayed out * Amount cannot be updated during any later phase of the session lifecycle * No Next Best Offer (NBO) will be created with a preset amount **When amount is omitted:** * User enters amount during the payment flow * Min/max limits (if configured) are enforced * Next Best Offer may be presented if the requested amount cannot be guaranteed ### Launching the Payment Flow Once you have a sessionId, launch the GEFT user flow by directing users to: ``` {{BaseUri}}/app/?sessionId={{sessionId}} ``` ## Request Example ```bash theme={null} curl --location '{{BaseUri}}/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{access_token}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "amount": 500.00, "options": { "guarantee": { "enable": true }, "notificationPreferences": { "language": "EN" } }, "payor": { "firstName": "Jean-Claude", "lastName": "Topinambour", "email": "mrflinks@flinks.com", "address": { "addressLine1": "123 street", "city": "Montreal", "postalCode": "h2eh2e", "province": "QC", "country": "CA" } }, "payee": { "account": { "accountNumber": "9876541", "transitNumber": "30265", "institutionCode": "999" } } }' ``` ## Response ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345" } ``` ## Field Specifications ### Character Limits | Field | Limit | Notes | | ----------------------- | --------------------------- | --------------------------------- | | `firstName`, `lastName` | 100 characters | Required for identity matching | | `email` | 100 characters | Used for notifications | | `referenceId` | 100 characters | Strongly recommended for tracking | | `postalCode` | 6 characters | No spaces (e.g., M5V0T7) | | `province` | 2 characters | Provincial code (e.g., ON, QC) | | `accountNumber` | Between 7 and 12 characters | Numbers only | | `transitNumber` | 5 characters | Numbers only | | `institutionCode` | 3 characters | Numbers only | ### Supported Province Codes AB, BC, MB, NB, NL, NT, NS, NU, ON, PE, QC, SK, YT ## Account Label Display Control how the "To Account" line is displayed in the UI using the `accountLabel` field: 1. **`accountLabel` provided**: Same text shown in "To Account" section 2. **`accountLabel` omitted, payee account present**: Flinks builds label using existing logic 3. **`accountLabel` omitted, no payee account**: "To Account" section is hidden ## Related Endpoints * [Get Session Details](/api/pay/endpoints/geft/sessions-details) - Retrieve comprehensive session information * [Cancel Session](/api/pay/endpoints/geft/sessions-cancel) - Terminate active session # FlinksPay Source: https://docs.flinks.com/api/pay/getting-started FlinksPay is a payment processing service that allows for your customers to pay for purchases, fund accounts, make loan repayments, and more using Interac E-Transfer Request Money. When you implement FlinksPay, your customers can use E-Transfer as their method of payment whilst being contained in a single user-experience. Pay by Bank provides a seamless transition process, for both you as a business and for your customers. An integration to FlinksPay (E-Transfer) is typically comprised of four elements: 1. Onboarding and Verification 2. Setting up the end-user experience 3. Initiating a request for a payment session 4. Reconciling Payments Using E-Transfer request-for-money via FlinksPay allows you to initiate a request to any given user and have them instantly and easily send funds to you. Once the application is set up, the next step is to start actually making transactions. In order to do this, you will need to perform the following actions: 1. Authorize with the API to validate identity and start the process (/`Authorize`). 2. Use the token generated during the authorization and your end-user `/payment` information to initiate an app session (/Sessions/Initiate). 3. Validate the session and activate the payment request by calling `/PaymentRequests`. 4. Use the activated `sessionId` to launch the FlinksPay application by appending the `sessionId` to base app URL. 5. (Optional) Retrieve real-time statuses on payment requests by using the `/PaymentRequests` GET endpoint. Throughout the app session, there will be multiple events that will be thrown based on the activity of the user and the session information. Please refer to the quick start guide for a full breakdown of these events. If you do not wish to monitor these events, all initiated sessions and transactions can be reviewed in real-time within the Flinks Customer Dashboard or via the `PaymentRequests` API. Flinks also provides daily reconciliation files which include all information on every single transaction processed (Successful and Errors) within a given day. This file is available either within your Payments Dashboard, or can be set up to be sent automatically to an email of your choice. # Common Error Codes Source: https://docs.flinks.com/api/upload/common-error-codes Below is a selection of common error codes you may prompt when using /Upload endpoints. | **STATUS CODE** | **MESSAGE / DESCRIPTION** | **STEPS TO REPRODUCE** | | :-------------- | :-------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------- | | 400 | AccountId has to either be provided to all transactions or to none of them. | Provide AccountId to only one transaction within a set. | | 400 | TransactionId has to either be provided to all transactions or none of them. | Provide TransactionId to only one transaction within a set. | | 400 | All TransactionIds have to be unique within the request. | Provide the same TransactionId for all transactions within a set. | | 400 | Country code is not valid. | Enter a country code in `OriginCountry` that is not `ca` or `us`. | | 400 | When using your own data, the country of origin must be provided. | `OriginCountry` is left empty or not present. | | 403 | FEATURE\_DISABLED | Attempt to call an `/Upload` endpoint while the feature is not enabled for your instance. | | 403 | If the JSON body size exceeds 5 megabytes, you may return this error. Please try again later. | Submit a request with a JSON body above 5 megabytes. | | 413 | If the JSON body size exceeds 5 megabytes, you may return this error. Please try again later. | Submit a request with a JSON body above 5 megabytes. | # Endpoints Source: https://docs.flinks.com/api/upload/endpoints Refer to the following table for a list of endpoints related to Upload. | **SECTION** | **DESCRIPTION** | | :----------------------------------------------------- | :-------------------------------------------------------------- | | [Document Processing](./endpoints/document-processing) | Receive processed data from an uploaded file. | | [Fraud Verification](./endpoints/fraud/) | Check to see if any uploaded files have been flagged for fraud. | # Document Processing Source: https://docs.flinks.com/api/upload/endpoints/document-processing/index Use these endpoints to perform actions related to document processing. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :---------------------------------------------------------------------------------------------------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------- | | [/Upload (Base Example)](/api/upload/endpoints/document-processing/upload-base-example) | POST | Uploads external transaction data for processing (for clients who are only using Upload). | | [/Upload (All Attributes Example)](/api/upload/endpoints/document-processing/upload-all-attributes-example) | POST | Uploads external transaction data for processing (for clients who are using Upload and Attributes). | | [/Upload/Categorization](/api/upload/endpoints/document-processing/upload-categorization) | POST | Uploads external transaction data for processing (for clients who are using Upload and Attributes, but for specific categories). | # Optional Parameters Source: https://docs.flinks.com/api/upload/endpoints/document-processing/optional-parameters The following section will detail any additional fields that are not required, but can be used to add more functionality to the API where necessary. Optional fields: * User identifier * AccountId * TransactionId * Balances ## User identifier UserIdentifier is an optional ID used to identify a request. It replaces the randomly generated GUID value within the Card when it is present. UserIdentifier is normally used to map to an ID on your side to relate the user once a response has been received. It is passed through to the response. ```json Useridentifier Example theme={null} ... { "UserIdentifier": "User Identifier Value", "Attributes": { "Card": [ "sum_debits_30_days" ] }, ... ``` ## AccountID, TransactionId AccountId and TransactionId are not mandatory, but, if present, must be present on all transactions. If you provide AccountId or TransactionId and it is missing a single transaction, your request will fail before being processed. This is primarily only used if the data being imported already has these characteristics. AccountId can also be used to submit multiple Account Types within the same request, but they will be aggregated together and you will only receive a singular Attributes response. These identifiers are displayed on the response back only when 'AttributesDetail' has been used, and are used to identify specific transactions within an account/attribute. ```json Accountid And Transactionid Example theme={null} { "AccountId": "Custom Account Id", "TransactionId": "Custom Transaction Id", "TransactionDate": "2021/01/22", "Description": "payroll - flinks technologies", "Debit": "100.00", "Credit": null, "Balance": "900.00" } ``` ## Balances Balances are a required field in order to run Attirbutes. They can be provided in multiple ways. If you have a 'Running Balance', you can include this within the 'balance' field per transaction. If you do not (or do not trust the balance per transaction from your external data), you have the option to provide a 'MostRecent' or 'Oldest' Balance.

Precedence of Balance Fields

MostRecentBalance takes precedence over OldestBalance - therefore if both are provided, only MostRecentBalance will be used.
MostRecentBalance takes precedence over OldestBalance - therefore if both are provided, only MostRecentBalance will be used. ### Option 1 - MostRecentBalance (recommended) ```json Mostrecentbalance Example theme={null} { "Attributes": { "Card": ["{{Attribute List}}"] }, "Options": { "OriginCountry": "{{Country Code}}", "MostRecentBalance": "{{MostRecentBalance}}", "AttributesDetail": ["{{Attribute List}}"] } } ``` ### **Option 2 - OldestBalance** ```json Oldestbalance Example theme={null} { "Attributes": { "Card": [" {{Attribute List}}"] }, "Options": { "OriginCountry": "{{Country Code}}", "OldestBalance": "{{MostRecentBalance}}", "AttributesDetail": ["{{Attribute List}}"] } } ``` ### Option 3 - Submitting multiple accounts and multiple MostRecentBalance options If you have submitted multiple accounts, and wish to apply a MostRecentBalance to each account, you can use the following structure to do so: ```json Multiple Accounts And Multiple Balances theme={null} { "Attributes": { "Card": [ "{{Attribute List}}" ] }, "Options": { "OriginCountry": "{{Country Code}}", "AttributesDetail": [ "{{Attribute List}}" ], "AccountOptions”: { "{{AccountID1}}” : { "MostRecentBalance”: "{{Most Recent Balance1}}" }, "{{AccountID2}}”: { "MostRecentBalance”: "{{Most Recent Balance2}}" } } }, ``` In the example above, transactions from 'AccountID1' would get balance 'Most Recent Balance1', and 'AccountID2' would get balance 'Most Recent Balance2'. # Transforming external transactions Source: https://docs.flinks.com/api/upload/endpoints/document-processing/transforming-external-transactions The best way to upload transaction data to Flinks is to include a list of 'already transformed' transactions within the JSON body of your request to /Attributes/Upload. Ideally, once you receive data from an external source, you will store that response/data on your servers and subsequently ensure that it is converted into an acceptable JSON format to include within the body of your request. Flinks expects your transformed 'transactions' object to include at least a TransactionDate, Description, Debit, and Credit fields (Balance is required, but can be included as either a running balance or by using one of the Balance options). Please see the template below for further information on what is required. ```json Template For Transactions theme={null} "Transactions": [ { "TransactionDate": "2021/01/22", "Description": "payroll - flinks technologies", "Debit": "100.00", "Credit": null, "Balance": "900.00" }, { "TransactionDate": "2021/01/21", "Description": "purchase newegg - rtx 3090", "Debit": "100.00", "Credit": null, "Balance": "1000.00" }, { "TransactionDate": "2021/01/21", "Description": "nsf fee random", "Debit": "10.00", "Credit": null, "Balance": "1110.00" } ] } ``` ## Field Breakdown | NAME | FORMAT | DESCRIPTION | REQUIRED? | | :-------------- | :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------- | | TransactionDate | YYYY/MM/DD | Date the transaction occurred. | Yes | | Description | String | Description of the transaction. | Yes | | Debit | Numeric, two decimal points maximum | If it is a purchase or outflow, the amount of the transaction. If it is not a debit, this field should be `null` or left empty. | Yes | | Credit | Numeric, two decimal points maximum | If it is a deposit or inflow, the amount of the transaction. If it is not a credit, this field should be `null` or left empty. | Yes | | Balance | Numeric, two decimal points maximum | The running balance after the transaction has been posted. Although this is not directly required, one of `Balance`, `MostRecentBalance`, or `OldestBalance` must be provided. | Yes (or use `MostRecentBalance` or `OldestBalance` if a running balance per transaction is not available) |

Note on transaction order

Flinks will assume that the order of the transactions is either ascending or descending. Please ensure that this format is followed. If there are irregularities (transactions out of order), inconsistent results may be returned.
# /Upload (All Attributes Example) Source: https://docs.flinks.com/api/upload/endpoints/document-processing/upload-all-attributes-example POST /v3/{customerId}/attributes/upload/AllAttributes This endpoint returns all available attributes for the given set of transactions. This endpoint returns **all available attributes** for the given set of transactions. Unlike the base `/Upload` endpoint, you do not need to specify which attributes you want to receive. The API will automatically calculate and return all supported attributes.

A note on Authorization

In order to access and use any of the /Upload endpoints, you will need a secret authorization token from Flinks. If you do not already have one, please reach out to your Flinks Representative.
# /Upload (Base Example) Source: https://docs.flinks.com/api/upload/endpoints/document-processing/upload-base-example POST /v3/{customerId}/attributes/upload Use the standard /Upload endpoint to upload transaction data and receive calculated attributes. Please select your required endpoint based on information you read in the previous section. All endpoints follow the same format, and all demand a POST call to their respective URLs with a JSON body request. For this documentation, we will use the standard `/Upload` endpoint to run through some examples. If you are using any of the other endpoints listed above, the only difference is that you do not need to include an `Attributes` or `AttributesDetail` list.

A note on Authorization

In order to access and use any of the `/Upload` endpoints, you will need a secret authorization token from Flinks. If you do not already have one, please reach out to your Flinks Representative.

A note on Use Case and All Attributes endpoints

The `Card` and `AttributesDetails` objects within these requests are not required and, if provided, will be overwritten with the expected Attributes contained within the requested endpoint.
## Request Fields | **NAME** | **DESCRIPTION** | Required? | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | Card | Contains the list of Attributes that will be returned for the given set of transactions. | Yes | | Origin Country | Tells the API to use a specific country model. The only accepted values are 'ca' or 'us'. | Yes | | MostRecentBalance | Tells the API what the MostRecentBalance was for these transactions. This is an alternative to attaching a balance to every transaction. If provided, Flinks will calculate the running balance per transaction using the provided figure. Please provide us the balance as of the most recent transaction here. If using this option, do not include the balance field in your transaction set or use `OldestBalance`. | Yes (if not using balance per transaction or `OldestBalance`) | | OldestBalance | Tells the API what the Oldest Balance was for those transactions. This is an alternative to attaching a balance to every transaction. If provided, Flinks will calculate the running balance per transaction using the provided figure. Please provide us the balance as of the oldest (historic) transaction here. If using this option, do not include the balance field in your transaction field or use `MostRecentBalance`. | Yes (If not using balance per transaction or `MostRecentBalance`) | | AttributesDetail | This will return an object in the response that contains the relevant transactions for all Attributes that are contained here. Please refer to our Attributes documentation for more information. | No | | Transactions | Contains the previously formatted transactions (defined earlier in this documentation) that you are uploading to Flinks. | Yes | # /Upload/Categorization Source: https://docs.flinks.com/api/upload/endpoints/document-processing/upload-categorization POST /v3/{customerId}/Categorization/Upload This endpoint will allow your teams to generate Broad Categorization Responses from External Data. This endpoint will allow your teams to generate Broad Categorization Responses from External Data. This endpoint differs from previous `/Upload` endpoints. You should use this endpoint if you are looking to return `Broad Categorization`: Broad Categorization is defined at Flinks as attempting to return both a `Category` and a `SubCategory` on every single transaction. This differs from our other /Upload endpoints, as they are more focused on `Attributes`, where the models are focused on depth over breadth. Currently, we only support this feature within the US Market. In order to use this endpoint, your `transactions` object must be formatted in the same way as defined under the `Transforming External Data` section of this documentation.

A note on Authorization

In order to access and use any of the `/Upload` endpoints, you will need a secret authorization token from Flinks. If you do not already have one, please reach out to your Flinks Representative.
## Request Fields | **NAME** | **DESCRIPTION** | **Required?** | | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | | OriginCountry | Tells the API to use a specific country model. Only accepted values are `us`. | Yes | | Transactions | Contains the previously formatted transactions (defined earlier in the documentation) that you are uploading to Flinks. | Yes | | UserIdentifier | Optional ID used to identify a request. When provided, it replaces the randomly generated GUID value within the Card. Typically used to map requests to your internal user ID and is passed through to the response. | No |

Note on Optional Parameters

All optional parameters listed in the `Optional Parameters` section of this documentation can also be used by embedding them within the 'Options' object.
# /FraudAnalysis Source: https://docs.flinks.com/api/upload/endpoints/fraud/fraud-analysis GET /v3/{customerId}/upload/fraudanalysis/{loginId} Use the /FraudAnalysis endpoint if you are using Flinks Upload and want to check if our fraud signals were triggered by documents that were uploaded. Use the /FraudAnalysis endpoint if you are using Flinks Upload and want to check if our fraud signals were triggered by documents that were uploaded. This endpoint returns a different 200 response based on if fraud was detected or not. # Fraud Verification Source: https://docs.flinks.com/api/upload/endpoints/fraud/index Use this section to check for fraud. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :---------------------------------------------------------- | :--------- | :----------------------------------------------------------------------------- | | [FraudAnalysis](/api/upload/endpoints/fraud/fraud-analysis) | GET | Check if our fraud signals were triggered by any documents that were uploaded. | # External Data (Upload) Source: https://docs.flinks.com/api/upload/getting-started Start using external transactional data using Flinks Enrichment. ## Overview Flinks built the Upload feature in order to allow your teams to leverage standardized, highly accurate data enrichment outputs (Attributes) regardless of the source of your financial data. This means that your team can submit external data to Flinks and receive the same insightful data that you already get from Flinks aggregated data. ### Questions and answers about /Upload #### What is /Upload? * An extension to Data Enrichment that allows you to submit external data to Flinks. * Allows your team to benefit from standardized, highly accurate data enrichment outputs on External Data (non-Flinks). #### What are the available options to submit External Data to Flinks? * Via the Dashboard in a clean and simple UX. * Via the /Upload API by reformatting your data and uploading it (recommended). * Via the /Upload API by submitting data in an external format and allowing us to cleanse it for you. ### What to expect in this section #### What this documentation covers: * How to transform your data so Flinks can accept it. * How to choose the correct Upload endpoint for your requirements. * How to set it up and make API calls using external data. Before continuing with this implementation, please reach out to our team to ensure that all required parameters are all set up on your instance.

Before getting started

The APIs detailed in this documentation should be viewed as an extension of the core Flinks Enrichment services. It is recommended that you understand the concept and use cases contained within Attributes before proceeding with this implementation.

Before getting started

You will need a secret bearer (authentication) token in order to use any of the /Upload API endpoints. If you do not have one already, contact your Flinks Representative to have one issued based on your private instance.

Note on unformatted data

This documentation will **not** detail how to submit data directly from another provider. If you plan on using a JSON file directly from another provider without reformatting first, please reach out to our team for information on how to do so and the API schemas we currently support.
# /AuthSecret Source: https://docs.flinks.com/api/utilities/data-sharing/auth-secret GET /v3/{customerId}/partnerdata/authsecret/{nameofpartner} Use the /AuthSecret endpoint if you are a client of Flinks and want to grant access for a partner to retrieve data that is processed by Flinks. This endpoint generates a unique authorization token that your partner can use to securely access Flinks APIs. Use the **/AuthSecret** endpoint if you are a client of Flinks and want to grant access for a partner to retrieve data that is processed by Flinks. This endpoint generates a unique authorization token that your partner can use to securely access Flinks APIs. Each partner only needs one unique authorization token for the duration of the time they are accessing data through Flinks. Call this endpoint once for each partner you are providing access to. In addition to `/AuthSecret`, this endpoint also returns a `PermissionId` that revokes access to Flinks APIs by disabling the unique authorization token. Save the `PermissionId` on your side. For more information about revoking access to Flinks APIs, see the [/AuthSecret/Disable](./auth-secret-disable) endpoint. # /AuthSecret/Disable Source: https://docs.flinks.com/api/utilities/data-sharing/auth-secret-disable GET /v3/{customerId}/partnerdata/authsecret/disable/{permissionId} Use the /AuthSecret/Disable endpoint if you are a client of Flinks and want to revoke access from a partner that you have previously granted access to. Use the `/AuthSecret/Disable` endpoint if you are a client of Flinks and want to revoke access from a partner that you have previously granted access to. This endpoint disables their AuthSecret so that they can no longer retrieve data through Flinks APIs. To re-enable the AuthSecret, use the [`/AuthSecret/Enable`](./auth-secret-enable) endpoint. # /AuthSecret/Enable Source: https://docs.flinks.com/api/utilities/data-sharing/auth-secret-enable GET /v3/{customerId}/partnerdata/authsecret/enable/{permissionId} Use the /AuthSecret/Enable endpoint if you are a client of Flinks and want to re-enable a partner's Auth Secret to provide access to data that is processed through Flinks. Use the `/AuthSecret/Enable` endpoint if you are a client of Flinks and want to re-enable a partner's Auth Secret to provide access to data that is processed through Flinks. This endpoint re-enables an Auth Secret that you have previously disabled. If this is the first time that you are providing this partner access to Flinks APIs, use the [/AuthSecret](https://docs.flinks.com/api/authorize/endpoints/data-sharing/auth-secret) endpoint to create a new Auth Secret and set up a new partner. # Data Sharing Source: https://docs.flinks.com/api/utilities/data-sharing/index A collection of APIs that allow you to share specific and limited end-user data with your partners. This section walks you through how to securely share user account data with a trusted third party. The most common use case of this service is to securely share a user's account information with a payment service provider of your choice. This service enables user data to be transmitted directly and securely to a partner without your team having to handle or map that data. There are two parts to this flow, one concerns the client side (giving access to a partner) and one concerns the partner side (a partner retrieving the data). For brevity, we refer to a `Client` as a provider of information, and a `Partner` as a retriever and processor of information. **Client-side steps** : 1. Generate an `Auth Secret` to validate and share with a partner (one-time). 2. Generate an `Access Token` to share with a partner (performed for each user). **Partner-side steps** : 1. Use the `Auth Secret` and `Auth Token` shared by the client to retrieve user-specific Account Information. *** **What's next?** For Clients, please refer to the following APIs for integration: * [/AuthSecret (Client)](/api/utilities/data-sharing/auth-secret) * [/PartnerData (Client)](/api/utilities/data-sharing/partner-data) # /PartnerAccess Source: https://docs.flinks.com/api/utilities/data-sharing/partner-access GET /partneraccess/{accesstoken} Retrieve shared user data through Flinks APIs using a partner access token. Use the `/PartnerAccess` endpoint if you are partnered with a client of Flinks and you want to retrieve shared user data through Flinks APIs. To successfully call this endpoint, you must have an AuthSecret and an Access Token. If you do not have these, ask your partner to provide them for you. Use the data that you retrieve from this endpoint within the terms that you and your partner have consented to. ``` ``` # /PartnerData Source: https://docs.flinks.com/api/utilities/data-sharing/partner-data GET /v3/{customerId}/partnerdata/{LoginId}/{AccountId} Use the /PartnerData endpoint if you are a client of Flinks and want to grant access for a partner to retrieve data that is processed by Flinks. This endpoint generates a unique Access Token that's associated with a specific user. Use the `/PartnerData` endpoint if you are a client of Flinks and want to grant access for a partner to retrieve data that is processed by Flinks. This endpoint generates a unique Access Token that's associated with a specific user. It's created based on the user's `loginId` and the `accountId`. Your partner uses this Access Token to retrieve data for that specific user. Access tokens are valid for 30 days from the time they are created. To extend an Access Token by 30 days, call this endpoint again and provide the same information that you provided in the previous call. Depending on your processes, your partner may need to provide information in addition to an Access Token. For example, if you are using a payments processor, you will likely attach the Access Token when creating a user. Let your partner know if there is additional information that they require for a successful API call.

Deleting Cards If you call the

[/DeleteCard](../../connect/endpoints/account-linking/delete-card) endpoint to delete data for a specific user, Access Tokens that are associated with that user will immediately become invalid and no data will be available for the partner to retrieve.
# Endpoints Source: https://docs.flinks.com/api/utilities/endpoints Refer to the following table for a list of utility endpoints. | **NAME** | **DESCRIPTION** | | :------------------------------------------------ | :------------------------------------------------------------------------------------------------ | | [Identity](/api/utilities/identity/index) | Confirm your customer's identity, account ownership, or verify the accuracy of their information. | | [Data Sharing](/api/utilities/data-sharing/index) | Securely share user account data with a trusted third party. | # /FieldMatch Source: https://docs.flinks.com/api/utilities/identity/field-match POST /v3/{customerId}/BankingServices/FieldMatch Verify customer identity and validate information against account data. Use the `FieldMatch` API to verify your customer's identity, confirm account ownership, or validate the accuracy of their information before linking a bank account to your financial service. Provide your customer's details in the request, and we'll compare them against the data associated with the account they're attempting to connect. Only the fields you include in the API call are evaluated when calculating the match score. To use this API, you must first obtain a `loginId` and successfully call the [/GetAccountsDetail](../../connect/endpoints/account-linking/get-accounts-detail) endpoint. The FieldMatch API uses fuzzy matching to compare submitted values against bank-held data. Each field returns a decimal score between `0` and `1`, where `1` is an exact match. The `overallMatchRate` is an average across all compared fields. Use the `threshold` parameter to get a boolean pass/fail result in addition to the decimal scores. The 200 response you receive may differ slightly from the example in the following use cases: * Any body parameters that are not included in the request will be missing from the response. * When a body parameter is included in the request and we do have data to review it against, we'll return a value between `0` and `1` for that particular field. * When a body parameter is included in the request and we do not have data to review it against, we'll return a `0` for that particular field. The field will also be added to the noData array in the response. * When the threshold parameter is missing from the request, you will only see the second part of the response with the decimals. # Identity Source: https://docs.flinks.com/api/utilities/identity/index Use this endpoint to perform actions related to the Field Matching Service. For more information. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :------------------------------------------------ | :--------- | :------------------------------------------------------------- | | [FieldMatch](/api/utilities/identity/field-match) | POST | Confirm your customers' identity, account ownership, and more. | # Investment Account Linking Source: https://docs.flinks.com/api/wealth/endpoints The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. Use these endpoints to perform actions related to connecting an investment account. Review the table below to determine which endpoint(s) you need to call. | **ENDPOINT** | **METHOD** | **DESCRIPTION** | | :-------------------------------------------------------------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------- | | [Investments](./endpoints/account-linking/investments) | POST | Retrieves investment account balances, holdings, and positions for a user. | | [GetWealthNightlyRefreshStatus](./endpoints/account-linking/get-nightly-refresh-status) | GET | Returns a list of investment connections with failed or stalled nightly refreshes and error details. | | [Investments (Delete)](./endpoints/account-linking/investments-delete) | DELETE | Deletes both investment and banking data associated with a given login. | # /GetWealthNightlyRefreshStatus Source: https://docs.flinks.com/api/wealth/endpoints/account-linking/get-nightly-refresh-status GET /v3/{customerId}/BankingServices/GetWealthNightlyRefreshStatus/ The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. Specific Endpoint to get a breakdown of Refresh Errors. ## Get Nightly Refresh Status on Investments The `/GetWealthNightlyRefreshStatus` endpoint can be used to reliably return the status of any unsuccessful or incomplete 'refresh' requests. You will require an Authentication Secrets Key in order to utilize this endpoint. The most common response you will receive from this endpoint will be a 200 OK with an empty array on IneligibleWealths (indicating that all nightly requests were successful). When a nightly refresh has stalled and/or failed - you will be returned the following information on that connection to handle as required. This includes the Institution, the *LoginId* (unique identifier for the user), the LastRefreshDate (the last attempted refresh), the LastRefreshState (the end state of the last refresh) and the LastRefreshErrorCode (the reason why we were unable to complete the connection). This will be returned as a list per unsuccessful connection. You should then be able to handle these errors and prompt your user to reconnect if applicable. Please note that this endpoint will only return users where the nightly refresh has been unsuccessful and reasoning why. It will not return any information about successful connections. In order to enable refreshes, you will need to ensure that you have the parameter scheduleRefresh=true enabled in your Flinks Connect integration.

You must authenticate first

Please note that you will need to provide a private Authentication key in order to use this endpoint. If you do not have one already provided, contact your Flinks Representative.

Still unsure?

If you're still unsure how to use the `/GetWealthNightlyRefreshStatus` endpoint, contact your Flinks Representative and we'll work with you to make sure it is implemented correctly.
# /Investments Source: https://docs.flinks.com/api/wealth/endpoints/account-linking/investments POST /v3/{customerId}/Investments The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. # /Investments/Delete Source: https://docs.flinks.com/api/wealth/endpoints/account-linking/investments-delete DELETE /v3/{customerId}/Investments/Delete/{loginId} Specific endpoint to delete both Investments and Banking Data. The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. Specific endpoint to delete both Investments and Banking Data. # Response Fields Source: https://docs.flinks.com/api/wealth/endpoints/account-linking/response-fields The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. On this page, you will find a breakdown of Response Fields for Institution, Account, Positions, Transactions, and Security. ## Institution The identifying information of the institution that you’re connecting to in order to retrieve investment data. | **NAME** | **DESCRIPTION** | **SCHEMA** | | :------- | :-------------------------------------------------------------- | :--------- | | Name | Name of the institution. | string | | Id | Unique identifier for the institution within the Flinks system. | string | | Accounts | See below | n/a | ## Account A single institution may have one or many accounts contained within it to it. The fields within this object give an understanding of the overall state of that particular account at a given period of time. | **NAME** | **DESCRIPTION** | **SCHEMA** | | :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Id | A unique identifier for the investment account within the Flinks system. | string | | FullAccountId | Full account information (as presented by the financial institution) associated with this specific investment account. Normally includes name of account, account ID, and currency. | string | | AccountId | Cleansed account ID/number associated with this specific investment account. Can be used for account transfer purposes. | string | | Name | Name of the investment. | string | | Type | The investment account type. An investment may be reported as type `unknown` for some special investment accounts or when the institution does not provide sufficient information. | enum (cash, chequing, tfsa, rrsp, fhsa, resp, rdsp, margin, short, long, lira, lrsp, rlsp, rrif, lif, lrif, prif, rpp, ipp, dpsp, spp, ndcp, nrsp, epsp, espp, esop, vrsp, unknown) | | Registered | Whether or not this is a registered account. | boolean | | Currency | The investment account settlement currency. | enum (aud, btc, cad, chf, cny, dkk, eur, gbp, hkd, inr, jpy, mxn, nok, nzd, sek, sgd, twd, usd, vnd) | | Cash | The amount of cash in the investment account, in the account settlement currency. | decimal | | AccountValue | The value of the account including cash and securities at market value. | decimal | | CurrencyValue | The value of the account in the account currency including cash and securities at market value. | decimal | | Positions | See below | n/a | | Transactions | See below | n/a | ## Positions The positions show the composition of the individual securities (types of investment products) within each account and how those securities have changed in value over time. | **NAME** | **DESCRIPTION** | **SCHEMA** | | :----------------- | :------------------------------------------------------------------- | :--------------------------------------------------------------------- | | Id | A unique identifier for the position within the Flinks system. | string | | Category | The position category. | string | | Class | The position class. | enum (equity, fixed\_income, cash\_equivalent, tangible\_asset, other) | | BookValue | The book value of the position (the acquisition price). | decimal | | Quantity | The quantity of the security in the position. | decimal | | MarketValue | The market value of the position, in the security’s currency. | decimal | | GainAmount | The current gain amount of the position, in the security’s currency. | decimal | | GainCurrencyAmount | The current gain amount in the account currency of the position. | decimal | | GainPercent | The current gain percent of the position. | decimal | | Currency | The investment account currency. | string | | SecurityId | See below | string | ## Transactions The transactions object contains a series of actions and events that occurred in order to construct the portfolio. You can think of this as an activity log or the story of how your end user got to where they are today. | **NAME** | **DESCRIPTION** | **SCHEMA** | | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------- | :--------- | | Id | ID of the transaction within the Flinks system. | string | | Date | The date when the transaction occurred. | timestamp | | Type | The transaction type (deposit, withdrawal, transfer, interest, dividend, distribution, roc, reinvest, tax, fee, sell, buy, income, unknown). | enum | | Description | The transaction description. This is taken from the institution’s website. | string | | Amount | The transaction amount, converted to the account settlement currency. | decimal | | Quantity | The quantity of securities involved in the transaction. | decimal | | Fee | Transaction fee amount, if applicable. | decimal | | SecurityId | Related Security object. | string | ## Security The security object contains descriptive information about the underlying asset of the portfolio. | **NAME** | **DESCRIPTION** | **SCHEMA** | | :------- | :------------------------------------------------------ | :--------------------------- | | Id | ID of the security within the Flinks system. | string | | Name | Name of the security. | string | | ISIN | A 12-character globally unique securities identifier. | string (null if not matched) | | CUSIP | A 9-character identifier for North American securities. | string (null if not matched) | | Currency | The currency in which the security is denominated. | string | | Price | The price of the security at the associated date. | decimal | | Date | The date and time the price was updated. | datetime | | Type | The security type. | string | | Symbol | Ticker symbol of the security. | string | | Aliases | Alternative names for the security. | string | # Start to Retrieve Investments Data Source: https://docs.flinks.com/api/wealth/getting-started How to make initial API calls to retrieve data. The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. ## Install Flinks Connect Users of this guide should be familiar with the basic mechanics of Flinks data connectivity, including how to [Set up Flinks connect.](../../guides/connect/getting-started#getting-started-with-connect) Displaying Investment institutions on Flinks Connect will be enabled automatically in your environment by Flinks. The system filters the list to display only financial institutions from which Investment data can be retrieved. Should a dedicated environment be required for testing this functionality, we can provision a new instance upon request . ## Make API calls Anytime you want to access your user's financial data, you will need to use the `LoginId` associated with that user's account to make a request to our API. Here is a step by step overview of this process: 1. A successful connection redirects the user to the [landing page of your choice](../../guides/connect/flinks-connect/widget). At this moment, a `LoginId `is issued and sent from your client-side to your server. 2. When you initiate an API call, the LoginId is exchanged for a RequestId with the Flinks API and a session is initiated. 3. Once a session is active, you can request for data and receive it. If you place a request while a session is loading, it may return an error. If this happens, retry after the session finishes loading. ## Pulling back /Investments data with the API Requests Flow Okay, let’s dig deeper into how exactly you can retrieve financial data from connected accounts. In order to do that, your server needs to perform a series of API requests. ### 1. Initiating a session with the Flinks API This is the first API request that needs to be executed when you want to retrieve data from a connected account. Flinks API needs to confirm the validity of the request and to know from which account you want to retrieve data. To do so, you will exchange your LoginId for a new RequestId. For that, the `/Authorize` endpoint needs to be called using a `POST` method, and it requires a `loginId` and the parameter MostRecentCached: true. To make it more concrete, let's suppose that you are opening a new session to retrieve the data for the` `LoginId: 5e115eac-1209-4f19-641c-08d6d484e2fe: ```json Json theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize \ -H 'Content-Type: application/json' \ -d '{ "LoginId":"5e115eac-1209-4f19-641c-08d6d484e2fe", "MostRecentCached":true }' ``` This is how your response will look like: ```json Json theme={null} { "Links": [...], "HttpStatusCode": 200, "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` The `LoginId` (`5e115eac-1209-4f19-641c-08d6d484e2fe`) was successfully exchanged for a `RequestId` (`1243c283-e0ca-4fda-a5e4-343068430190`). Now that the session is active, we have everything we need to place a call to retrieve`Investments`data. ### 2. Requesting Ready-to-Deliver data The next step is for your server to send a request for data. This request uses the `/Investments` endpoint, which also needs to be made using a POST method, and requires the acquired `RequestId`, the previously used `LoginId` and the parameter `MostRecentCached:true`. Continuing our example using our `RequestId` (`1243c283-e0ca-4fda-a5e4-343068430190`), it looks like this: ```json Json theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/GetAccountsDetail \ -H 'Content-Type: application/json' \ -d '{ "RequestId":"1243c283-e0ca-4fda-a5e4-343068430190" }' ``` The most common first response to get in a request for data returns an `HTTP 202` `FlinksCode: OPERATION_PENDING`, meaning that the data you are requesting is still being processed. Here's an example of a typical API response for data pending processing: ```json Json theme={null} { "FlinksCode": "OPERATION_PENDING", "Links": [...], "HttpStatusCode": 202, "Message": "Your operation is still processing", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` Because of this, your server needs to expect and be able to handle this response and proceed to poll the request (link to async poll code samples) to receive the data, which is described in the next step. When sending requests for data... Your integration must handle the `202 OPERATION_PENDING` response. ### 3. Requesting Pending-to-Deliver data While you receive the response `HTTP 202 FlinksCode: OPERATION_PENDING`, you need to keep calling the `/Investments` endpoint (with the same parameters above) every 10 seconds for a maximum of 30 minutes. If you are still receiving `202 OPERATION_PENDING...` In case your data is still pending, you need to call this endpoint every 10 seconds for a maximum of 30 minutes. This doesn't mean that your request is going to take that long, but this global timeout is required to avoid infinite loops. Once your data is done being processed, the API will respond with an HTTP 200 and a JSON payload containing all the data we collected from the investment account in a standard format. Your app server will be ready to start handling it according to your use-case. For a full detailed breakdown of the `/Investments` call and response fields, please refer to the documentation on the [`/Investments`](./endpoints/account-linking/investments) `API page`. The `/Investments` endpoint gives Flinks' clients the ability to retrieve user-permissioned data on wealth or investment (terms which here can be used interchangeably) holdings across a number of different assets, classes, and institutions. The product's architecture is fundamentally based on our retail banking data aggregation response; however, it incorporates several novel concepts unique to this dataset. Here are some of those key new concepts in action, which will all be explored in depth later in this guide: * Institution: the financial institution where the investment accounts exist * Accounts: the places where investment activity occurs * Positions: a point-in-time snapshot of the investment portfolio * Securities: the details of the assets within the current or past positions * Transactions: the historical activities that built the current portfolio # Changelog Source: https://docs.flinks.com/changelog Product updates and announcements

June 2026

## Flinks Upload **Statement download link now appears for every account**: When an uploaded statement includes multiple accounts, only one account previously showed a Download link in the Customer Dashboard. This is now fixed so every account displays its Download link once the upload is processed. **Reliable Tag field in Fraud Analysis and Void Cheque responses**: The *Tag* field is now returned reliably across Fraud Analysis and Void Cheque responses, so you can consistently classify and route results downstream. **Consistent user identity across Upload flow**: User identity is now consistently returned for the Uploads flow across the *Authorize*, *Get Accounts*, *Get Statements*, and *Attributes* endpoints, giving you a dependable identifier for tracking and auditing. **Mixed-file batches no longer get stuck in progress**: We’ve fixed an issue where uploading a large number of mixed batches of PDF and image statements could stall without returning an error. Batches now process through to completion with accurate status updates. **Clear error when document processing fails**: When a document can’t be processed, such as an unreadable void cheque, cached *GetAccountsDetail* now returns a clear *Document\_Processing\_Failed* error instead of a retry-later response, avoiding unnecessary retries. **Clear error when file or size limits are exceeded**: Uploads via the API exceeding 24 files or 180 MB in a single session are now blocked with a clear error indicating which limit was hit, instead of silently failing. **Complete account data when a statement and void cheque are uploaded together**: *GetAccountsDetail* now correctly merges data from both documents, including institution and transit numbers, for a complete account record. ## Flinks Pay [**EFT V2:**](./api/pay/endpoints/eft/v2) We rolled out EFT V2, a unified, session-based flow that replaces the individual endpoints Flinks Pay customers previously had to stitch together. With one session to initiate and a hosted UI component handling account linking, amount entry, and PAD agreement out of the box, integrating EFT now takes days instead of weeks. No custom front-end required. **Smoother payment tracking**: G-EFT clients now get real-time visibility into payment status. Instead of jumping from *started* straight to *completed*, the system now reflects when a user is actively in the payment flow, marking it complete only once finalized. Currently available in the Sandbox environment only. ## Customer Dashboard **Clearer, more organized NSF insights in the Lending Report**: The NSF section of the Lending Report has been redesigned with a dedicated NSFs tab showing total reversed payments by full history and the last 30, 60, and 90 days. Existing tabs (NSF Fees, NSF Overdraft Protection Fees, and Stop Payments) now have updated labels, clearer tooltips, and dollar signs for easier reading.

May 2026

## Flinks Pay [**Multi-account settlement for Interac Request for Money:**](./api/pay/endpoints/e-transfer/sessions-initiate#payee-account-optional) Flinks Pay customers using Interac Request for Money can now settle funds to different bank accounts on a per-transaction basis, instead of routing all payments to a single account. You can specify the destination account when creating a session, enabling more flexible payout routing based on your workflow or business model. Settlement reports now also reflect the bank account used for each transaction, giving finance teams clearer reconciliation visibility. Available on the V2 API only. [**Unified cancel endpoint for e-transfer sessions:**](./api/pay/endpoints/e-transfer/sessions-cancel) You can now cancel e-transfer sessions through the V2 API, giving you a single, consistent endpoint to invalidate sessions when users abandon the flow. The existing V1 endpoint remains fully supported. ## Flinks Enrich **More granular NSF reversal tracking**: We’ve added 30, 60, and 90-day lookback windows for *count\_reversed\_payments\_because\_of\_nsf*, giving lenders and risk teams more visibility into NSF-related payment reversal patterns. This helps support more informed lending and credit decisions. Available in the Lending package only. **Consistent error handling when transaction data is unavailable**: The Attributes API now returns standardized error messages when no transaction data is available, making responses easier to interpret and troubleshoot. ## Flinks Connect [**Faster reconnect flows with pre-filled account selection:**](./guides/connect/resume-and-reconnect#preserve-previously-selected-accounts) You can now preserve a user’s previously selected accounts when using the Reconnect feature in Flinks Connect. By passing account IDs through the *resumeSelectedAccounts* parameter, users can skip the account selection step during reconnect flows, creating a faster and smoother experience. *GetAccountsDetail* responses are also scoped to the selected accounts only. **Field matching accuracy enhancements**: We’ve improved how the system handles common address variations in both English and French, including street type abbreviations such as “Blvd.” vs “Boulevard” and “Ave.” vs “Avenue.” French province names such as “Nouvelle-Écosse” and “Nouveau-Brunswick” are also now normalized to their provincial codes, helping improve match consistency and reduce false negatives caused by formatting differences.

April 2026

## Flinks Connect **Dark theme support**: Flinks Connect now supports a theme parameter, giving you control over how the widget appears in your application. You can choose between light, dark, or system, which automatically adapts to the user’s device settings, helping create a more seamless, consistent experience across your product. The G-EFT flow currently supports light mode only, and bank-hosted OAuth popups are not affected by the theme setting. **Pre-fill account selection on Resume**: You can now pass previously selected account IDs into a reconnect (Resume) session using the resumeSelectedAccounts parameter. This skips the account selection step and scopes GetAccountsDetail to only those accounts, creating a smoother reconnect experience without requiring users to reselect accounts. ## Flinks Enrich **Improved detection of NSF-related reversals**: Flinks Enrich now captures NSF events based on reversed transactions due to insufficient funds, rather than relying solely on fee-based signals. This provides a more accurate view of account behavior, especially when multiple NSF events occur in a short period. Available via the Flinks Enrich API and in Customer Dashboard (CDB) reports, including User Analysis and Credit Risk. Reversed payments due to NSF are reflected in the count\_reversed\_payments\_because\_of\_nsf attribute. **Smart Transaction Categorization: Miscellaneous category**: We’ve added a new “Miscellaneous” category to support flexible recategorization when no suitable category exists. Transactions can now be reassigned to Miscellaneous Payment or Miscellaneous Deposit, with edit history available for audit. **Fixed annual revenue calculation for business attributes**: We’ve fixed an issue where the annualized revenue estimate for business customers could return zero. Revenue is now correctly calculated based on operating income, restoring accuracy to business financial insights. **Fixed employer income calculation for reversals**: We’ve fixed an issue where payment reversals were included in employer income deposit calculations. Reversals are now excluded, ensuring accurate deposit totals across employer income sources. ## Flinks Upload **Improved account number accuracy for void cheques**: We’ve fixed an issue where leading zeros in uploaded account numbers could be dropped during processing. Account numbers are now preserved correctly, ensuring more reliable data capture. ## Flinks Pay **Balance validation**: You can now validate available account balance directly within the G-EFT flow. This ensures transfer amounts do not exceed the account balance or configured limits, helping reduce failed transactions. **Expanded risk levels**: G-EFT now supports two additional risk levels (low-medium and medium-high), providing more granular risk assessment in guarantee decisions. **Same-day settlement for Standard EFT**: Standard EFT transactions submitted before the cut-off time can now be processed the same day. This gives you faster access to funds and improves cash flow predictability.

March 2026

## Flinks Enrich

smart transaction categorization

**Smart transaction categorization**: When project owners or admins update transaction categories in the Customer Dashboard, Flinks Enrich learns from these changes and automatically applies them to future transactions using pattern recognition to reduce manual work and improve consistency across your data. These updates can enhance Attributes and related calculations, while Broad Categorization remains unchanged. **Expanded business lender detection**: We’ve expanded our known business lender coverage to improve detection of lending-related transactions, enhancing the accuracy of loan debit and credit categorization within Attributes. ## Flinks Upload **Improved upload tag consistency with Fraud Analysis API**: We identified an issue in certain scenarios where tags applied during file uploads were not preserved after Fraud Analysis API processing. We’ve deployed a fix to address this and improve tag consistency across workflows. ## Flinks Pay **User-friendly G-EFT error messages**: G-EFT now displays clearer, more user-friendly error messages for identity verification failures and account eligibility issues. All messages are available in both English and French for a consistent bilingual experience. **Enhanced failure insights via JS events**: The existing **GUARANTEE\_FAILED** event now includes a detailed failure reason, distinguishing between **IDENTITY\_MISMATCH** and **ACCOUNT\_NOT\_ELIGIBLE**. This gives you better visibility into why a transaction failed. **Available balance validation**: Users can now only submit amounts up to their available account balance. The interface displays the maximum allowable amount and prevents over-limit entries, helping reduce the risk of NSF.

February 2026

## Flinks Connect * **FieldMatch accuracy enhancements**: We’ve made improvements to the [FieldMatch API endpoint](./api/connect/endpoints/identity/field-match) to deliver more accurate and reliable match results in edge cases. Enhancements include improved middle name and initial detection (e.g., *John J Smith vs. John Jesson Smith*), better handling of special characters and accents (e.g., *Junior* vs. *Júnior*), and improved matching when address details are incomplete or partially provided (such as missing unit numbers or coach house designations). These updates will help reduce false negatives and increase match confidence. ## Flinks Enrich * **Business & Personal categorization improvements**: We’ve enhanced categorization for Business and Personal Attributes, including improved detection of deposit patterns, cash advance patterns, and expanded micro-lender recognition. [Click here to explore our attribute packages.](./guides/enrich/attributes-packages#credit-risk)

January 2026

### Flinks Pay * You can now receive a Next Best Offer (NBO) even when you specify an amount when creating a G-EFT session. As long as the NBO amount falls within your configured minimum and maximum limits, the offer will be generated. If it falls outside those limits, the session is marked as failed and the guarantee is refused, unchanged from previous behavior. * CAD is now specified as the default currency across the G-EFT flow, including the Enter Amount, Review your deposit details, and Next Best Offer screens.

December 2025

### Flinks Pay * You can now control whether the To account section appears on the deposit screen and customize the label shown during the G-EFT deposit flow. This gives you more flexibility to tailor the experience to your product and user journey.

Enter Amount Screen

### Flinks Upload * You can now use the Refresh button in the Client Dashboard to run fraud checks on previously unprocessed files. This applies to files uploaded during periods when fraud analysis was unavailable. When fraud results are missing, Flinks Upload completes the analysis and updates the risk verdict. This capability applies to unprocessed files up to 90 days old. * We now factor the Unreconciled Balance signal into fraud verdicts. When present, files previously marked Normal or Trusted are updated to Warning, while Warning and High Risk verdicts remain unchanged. The updated verdict appears on the file page, checklist, and Overview tab.

November 2025

### Flinks Pay **We've introduced several enhancements to Guaranteed EFT (G-EFT):** * You can now explicitly accept or reject a payment guarantee before completing a G-EFT session. A new webhook notifies you when a guarantee is issued, and full guarantee details are available so you can automate or manually review approvals. You can also configure auto-acceptance for low-risk guarantees. * You can now disable the default Flinks consent screen and use your own, enabling a fully branded consent experience while keeping configuration centralized. * You can now enable or disable Next Best Offer. When turned off, users proceed only with the amount you or they specify, giving you tighter control over eligibility and user flows. * A new webhook notifies you when a G-EFT session moves to failed, cancelled, or completed status. This gives you real-time insight into why a session didn't complete or where a user exited the flow. * You can now direct funds either to your organization's settlement account or to individual user accounts, offering more flexibility based on your use case. * A new endpoint returns complete payor account details, including institution code, transit number, account number, and account label. ### Flinks Upload * Files added to an existing request through File Management are now analyzed by our Fraud API. Fraud signals appear directly under each document link in the Document Check tab, and they now contribute to the final verdict shown in the Overview tab.

October 2025

### Featured Update * We've completely revamped our documentation site. Explore the fresh design, streamlined navigation, faster and more accurate search, and overall smoother experience to help you find what you need faster. ### Flinks API * We've added a new multi-factor authentication (MFA) request option for clients who are using Trusted Device Verification MFA as part of a Legacy API integration. If a user doesn't receive the MFA push notification on their device, you can now trigger an additional API call to re-prompt the notification.

September 2025

### Flinks Connect * We've added a JavaScript event that is triggered when an authorization token is expired or invalid, allowing clients to automatically restart the authentication flow and provide a smoother user experience. * We've updated some Flinks connect animations. * We've made file management smarter and more flexible: you can now update existing upload requests and resend upload links tied to the same login, so collecting updated documents is faster, smoother, and keeps every user's record perfectly organized. ### Flinks Outbound * We've introduced a new api/v2/providers Outbound API endpoint to enable Data Recipients to retrieve detailed Data Provider insights without using Flinks Connect, including filtering options and comprehensive provider metadata.

August 2025

### Flinks Connect * We've made some improvements to the Flinks Connect flow, particularly when resuming an expired session. * We've also improved session tracking. Clients can now set up a JavaScript event to track by session and user ID. ### Flinks Pay * We launched a new webhook system to clients who are using Interac E-Transfer as their payment method in Flinks Pay. When enabled, this webhook will send events when a transaction status has changed.

July 2025

### Flinks Upload * We now support a new document type in Flinks Upload: void cheques. Clients can now upload and process void cheques in addition to other bank statements. To enable this feature in Flinks Connect, see Upload Bank Statements. ### Flinks Enrich * We've released new categorization models to a select group of clients for testing purposes. This update will allow us to process twice as many transactions per account, and will be made more widely-available at a later date.

June 2025

### Flinks Connect * We’ve added a new optional text field in the footer of the credentials page, allowing you to further customize the Flinks Connect experience. * We’ve updated Flinks Connect by adding a new card scanner and the ability to show customer logos on the Consent Screen. We’ve also released design updates that are available to select clients. To learn more about these updates or to enable these improvements in your integration, contact your Flinks Representative. * Upload no longer requires customers to select a financial institution when they’re uploading a file. However, we’ll still group it under the correct financial institution after processing the data. ### Flinks API * We’ve released updates to our API that has improved the accuracy of the Field Matching Service.

May 2025

### Flinks Pay * We've expanded the number of financial institutions we support. Customers can now receive an instant e-transfer payment from 223 financial institutions across Canada. ### Bug Fixes * We've completed a bug-fixing blitz that improved quality and functionality to several Flinks products, including Client Dashboard, Enrichment, and Upload (document processing).

April 2025

### Flinks Outbound * We've added more than 3,000 new financial US institutions.

March 2025

### Flinks API * We've added two new parameters to the `/FieldMatch` endpoint: `email` and `phone`. You can now use these parameters to help you confirm a customer's identity or account ownership.

February 2025

### Flinks Connect * We've released design updates to the error screens in Flinks Connect. To see these new screens, review our Flinks Connect widget.

January 2025

### Flinks Connect * We've released design updates to the Consent Screen in Flinks Connect. Clients can now customize this screen by adding their company logo. For more information, see Flinks Connect Parameters - Customise Your Integration or contact your Flinks Representative.

December 2024

### Featured Update * Watch our Changelog Wrapped video to learn more about the exciting releases that happened in 2024:
``` In the example above, we are using the Sandbox environment. Do all of your configurations and testing in this environment, then change it to your production environment before going live. ### Mobile and native apps To embed Flinks Connect in an iOS, Android, or React Native app using a WebView, see [Mobile Integration](/guides/connect/mobile-integration). For OAuth-specific configuration across mobile platforms, see [OAuth Integration](/guides/connect/oauth-integration). # Flinks Connect Overview Source: https://docs.flinks.com/guides/connect/flinks-connect/flinks-connect Learn how Flinks Connect works, what your customers see, and how to get started with the iframe integration. Flinks Connect is our most popular solution to connect end-user accounts. It supports oAuth technology and lives in an iframe that you build into your site. We handle all of the complicated bank processes on your behalf, including multi-factor authentication, edge cases, errors, and more. Any new financial institutions that we support are automatically added to your configuration. Your customers can be confident that the data they’re sharing is safe. Their login credentials are securely stored and are never shared with your servers. ## How it works It prompts your end-users to perform the following actions to connect their financial accounts: 1. Provide consent to share their financial data. 2. Select their financial institution. 3. Enter their username and password to log in with their financial institution. 4. Answer a multi-factor authentication (MFA) question if their financial institution requires them to. 5. Select the account they want to share. What you'll need to do on your end: 1. If the login is successful, Flinks provides you with a `loginId`. 2. Send the `loginId` to the server that's hosting your website/app. 3. Your server passes the `loginId` to Flinks servers, and we exchange it for a `requestId`. 4. The `requestId` allows you to start securely receiving the customer's data. This option requires your development team to build the iframe into the script for your site or app. ## What your customers will see When you use Flinks Connect, this is what your customers will see: Screenshot of the Flinks Connect UI on desktop. The screen shows the data-sharing consent page where the user reviews what information will be shared with Flinks and can agree to continue. For more information on how this solution works, see [Set up Flinks Connect](../getting-started#getting-started-with-connect). ## UX best practices A few quick wins to maximize conversion and build trust with your customers: * **Prompt at the right moment**: Ask users to connect in the final steps of your onboarding or application flow, once they're already engaged. It feels like the natural next step and reduces drop-off. * **Show your brand**: Use the `customerName` parameter to display your company name on the Consent, Login, and Success screens. This builds trust and helps customers understand who they're sharing data with. * **Enable consent**: Set `consentEnable=true` to show a clear data-sharing consent screen before customers enter their credentials. This improves transparency and user confidence. For the full guide covering flow design, trust-building, copywriting, and a support-agent checklist, see [UX Best Practices](../ux-best-practices). ## Set up Flinks Connect Complete the following steps to set up Flinks Connect: 1. [Add the Flinks Connect iframe to your page.](./add-flinks-connect-iframe) 2. [Customize your Flinks Connect widget using the customization parameters.](./widget#customize-your-flinks-connect-widget) 3. [Set up an event listener to enhance your integration.](./use-event-listener) 4. [Retrieve your customer's account data.](../retrieve-account-data) # Handled Errors Source: https://docs.flinks.com/guides/connect/flinks-connect/handled-errors Reference for the 10 error types that Flinks Connect handles automatically, with their corresponding JavaScript events. Flinks Connect handles several common authentication and connection errors automatically, displaying user-friendly messages to your customers. Each error triggers a corresponding JavaScript event that you can capture with an [Event Listener](/guides/connect/flinks-connect/use-event-listener). ## Error types | Error Event | HTTP Code | Flinks Code | Description | User Action | | :-------------------------- | :-------- | :-------------------------- | :-------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | | `INVALID_USERNAME` | 401 | `INVALID_USERNAME` | The username provided was different from what the bank expected. | Customer should re-enter their username. | | `INVALID_PASSWORD` | 401 | `INVALID_PASSWORD` | The password was not provided or was different from what the bank expected. | Customer should re-enter their password. | | `INVALID_LOGIN` | 401 | `INVALID_LOGIN` | The provided credentials are incorrect. | Customer should verify and re-enter their login details. | | `INVALID_SECURITY_RESPONSE` | 401 | `INVALID_SECURITY_RESPONSE` | The MFA response provided was different from what the bank expected. | Customer should try answering the security question again. | | `RETRY_LATER` | 401 | `RETRY_LATER` | Flinks was unable to open a connection with the financial institution. | Customer should try again later. | | `UNAUTHORIZED` | 401 | `UNAUTHORIZED` | The institution did not authorize access. | Customer may need to complete additional steps on their bank's website. | | `NEW_ACCOUNT` | 401 | `NEW_ACCOUNT` | The customer must take action directly on their online banking before connecting. | Customer should log in to their bank website first (e.g., accept terms). | | `AGGREGATION_ERROR` | 500 | `AGGREGATION_ERROR` | Flinks encountered an unexpected error during processing. | Customer should try again. If the issue persists, contact support. | | `DISABLED_INSTITUTION` | 405 | `DISABLED_INSTITUTION` | The selected financial institution is not currently available. | Customer should try a different institution or try again later. | | `DISABLED_LOGIN` | 401 | `DISABLED_LOGIN` | The account has been deactivated by the financial institution. | Customer must contact their bank to reactivate the account. | ## Capturing error events To detect these errors programmatically, add an Event Listener to your Flinks Connect integration: ```html theme={null} ``` ## Testing errors You can test each error type using the [Flinks Capital test institution](/guides/connect/flinks-connect/test-users) by changing the username to specific test values. See the full list of [test error scenarios](/guides/connect/flinks-connect/test-users#list-of-errors-to-test-for). For a complete list of all API error codes (including those not handled by Flinks Connect), see [Error Codes](/api/authorize/error-codes). # Test Users Source: https://docs.flinks.com/guides/connect/flinks-connect/test-users Use test credentials and the Flinks Capital dummy institution to test your Flinks Connect integration. Testing is important to ensure that everything is set up correctly and works as expected. Flinks allows you to do testing in both your Flinks Dashboard and in Flinks Connect. Read the following passages to understand how to start testing with Flinks. ## Test in your Flinks Dashboard We provide dummy data that you can use to complete testing in your Flinks Dashboard. To start using dummy data, locate your sandbox credentials: 1. Click on the **Settings** screen and navigate to the **Environments** tab. 2. Locate the **Sandbox** environment, then expand the row. These are your sandbox credentials that you can use for testing.

These credentials will only work for testing purposes within the Flinks Dashboard

It's not a live sandbox environment and therefore will not work if you refer to it (either the environment or credentials) in your code. Do not include the sandbox credentials when you start to code. Instead, use the API credentials that are located on the same page under your company project name.
## Complete error testing in Flinks Connect You can log in to Flinks Connect using our dummy institution for testing purposes. With the dummy institution Flinks Capital, you can test happy paths and edge cases while experimenting with different functionalities. The login credentials are as follows: Username: `Greatday` Password: `Everyday` Institution: `FlinksCapital` ### Security Questions and Answers The security questions for the testing environment differ depending which country you are logging in from. #### Canada In Canada, the account has three security questions and answers. Use the following answers when asked: What city were you born in?: `Montreal` What is the best country on Earth?: `Canada` What shape do people like the most?: `Triangle` #### United States In the United States, most of the security questions are basic arithmetic questions. Questions you will find may look like: How much is 2 + 2?: `4`

No Multifactor Authentication

Sometimes an account doesn't have Multifactor Authentication. When this happens, an authenticated loginId will be issued after the username and password are validated by the Financial Institution. To test this, change the username to: `greatday_nomfa`.
## List of errors to test for The following is a list of errors that you can test for in Flinks Connect. To try testing, input the instructions to log in to the dummy institution Flinks Capital, but change the username to the one suggested under the error you'd like to test. ### Disabled Account Sometimes an account may be disabled on the institution's side. When that happens, Flinks Connect will return the `DISABLED_LOGIN` FlinksCode. To test this, change the username to: `test_disabled_account` ### Service Unavailable Sometimes the financial institution is doing maintenance, and its services are not available. When that happens, Flinks Connect will return the `RETRY_LATER` FlinksCode. To test this, change the username to: `test_service_unavailable`. ### Operation Dispatched When your request exceeds 210 seconds of processing, we will return you a `202 - Accepted` and a partial result of what has been processed so far. This means we have dispatched the process into a queue for long-running operations. When that happens, Flinks Connect will return the `OPERATION_DISPATCHED` FlinksCode. In order to retrieve the data, you will need to long-poll the Async endpoint as explained in the [GetAccountsDetail Asynchronous](../../../api/connect/endpoints/account-linking/get-accounts-detail) flow. To test this, change the username to: `test_dispatched` ### Operation Pending When your request is not yet completed, we will return you a `202 - Accepted` and a partial result of what has been processed so far. This means we are still processing the operations. When that happens, Flinks Connect will return the `OPERATION_PENDING` FlinksCode. In order to retrieve the data, you will need to long-poll the Async endpoint as explained in the [GetAccountsDetail Asynchronous](../../../api/connect/endpoints/account-linking/get-accounts-detail) flow. To test this, change the username to: `test_pending`. ### Delay in GetAccountsDetailAsync The test user will add a 30-second delay in retrieving the data through our [/GetAccountsDetailAsync](/api/connect/endpoints/account-linking/get-accounts-detail-async) endpoint. To test this, change the username to: `greatday_delay` ### Expired Session This test user will trigger a `SESSION_EXPIRED `message. To test this, change the username to: `test_session_expired` ### Too Many Failed Attempts If the user enters incorrect login credentials, or fails to successfully answer the MFA question(s) after a certain number of tries, they'll be shown an error message. To test this screen, change the username to: `test_too_many_failed_attempts` ## Complete Multifactor Authentication testing Some banks have unique special flows that you may encounter while your end-user is attempting to connect to their bank account. It is possible to test them with FlinksCapital to ensure that you can support them correctly. Take note that all of the following usernames share the same password: Password: `Everyday` ### Questions and image selection Multifactor Authentication After answering the usual Multifactor Authentication (MFA) question, the client must select their personal image from a list. To test this, change the username to: `test_laurentienne` ### Iterable Multifactor Authentication questions Sometimes, the institution will ask the client to reset their MFA questions and answers during the account connection step. This situation happens when the bank has determined that a suspicious login attempt was recently made. To test this, change the username to: `test_rbcsecurity` ### Trusted device or push notification flow Some institutions have a flow in which a trusted user's device receives a notification to confirm the authentication. To test this, change the username to: `test_realtime` ### Different types of Multifactor Authentication Similar to the iterable MFA questions, this flow happens when the user incorrectly answers their MFA question 3 times in their latest login attempt. The client will first have to confirm their identity by answering a question that only they should know the answer to. After this successful confirmation, the client must recreate a new set of 3 questions and answers. Here are all the possible types of questions: * QuestionAndAnswer with prompt * MultipleChoice with iterables * MultipleChoiceMultipleAnswers with iterables * QuestionandAnswer with iterables To test this, change the username to: `test_scotiasecurity` ### One Time Passcode Some financial institutions have activated two-factor authentication, requiring the user to select a phone number and an action (text or call), then enter a security code also known as a One Time Passcode (OTP). To test this, change the username to: `test_td` # Use a Custom Tag Source: https://docs.flinks.com/guides/connect/flinks-connect/use-custom-tag You can use custom tags to mark requests or groups of requests. This section will cover what a custom tag is and how to handle tag information. ### Account Selection and Tag For specific use-cases, it is important to know which account the user will want to work with. For instance, for verifying an account, typically used for money transfers, knowing which account to draw money from is important to avoid NSFs.

Selected Account Identification

You can store the information about which account your user has selected by collecting and keeping the `AccountId` along with the `loginId`.
Custom tags can be used to mark specific requests or groups of requests according to your own context. For example, if you already have a specific UserId that you want to associate with a loginId, it can be done by using a tag.

Note:

Different tags need to be assigned directly in the iframe URL using the "Tag" parameter.
### Handling AccountId and Tag Using the same methods to receive the `loginId`, you are able to capture both `Tag` and `AccountId` information. Below is an example of a redirected landing page URL. The `tag` value you passed in the iframe URL is appended to the redirect, alongside the `loginId`: ```text Redirect URL theme={null} https://example.com/thank-you?loginId=8b35f6c8-e7b6-41d3-98f8-08d68b7f8d31&tag=YourTag&institution=FlinksCapital ``` Below is an example of a JavaScript event listener: ```json Json theme={null} { "step": "REDIRECT", "institution": "FlinksCapital", "url": "https://example.com/thank-you?loginId=8b35f6c8-e7b6-41d3-98f8-08d68b7f8d31&tag=YourTag&institution=FlinksCapital" } ``` If you're using Webhooks to receive your data, the payload will contain the chosen tag. Below is an example of a Webhook payload (transactions, balance, and holder have been abbreviated for simplicity): ```json Json theme={null} { "ResponseType": "GetAccountsDetail", "HttpStatusCode": 200, "Accounts": [ { "Transactions": [...], "TransitNumber": "77777", "InstitutionNumber": "777", "OverdraftLimit": 0, "Title": "Chequing CAD", "AccountNumber": "1111000", "Balance": {...}, "Category": "Operations", "Type": "Chequing", "Currency": "CAD", "Holder": {...}, "Id": "ae1dac72-70da-4626-fed8-08d682e1ff4a" }, {...} ], "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190", "Tag":"YourTag" } ``` Tags are also visible in the [Flinks Dashboard](/guides/dashboard/request-feed): you can use them to locate and filter the requests associated with a given tag. # Use an Event Listener Source: https://docs.flinks.com/guides/connect/flinks-connect/use-event-listener Add an event listener to track user progress and API events in your Flinks Connect integration. Flinks Connect triggers events based on authentication responses and different steps that the user completes within the application. We recommend adding an Event Listener to your Flinks Connect integration to track your users' progress and improve their overall experience. As a user progresses through the account connection flow, you'll be notified of all successful (and unsuccessful) attempts to connect an account. When a user fails to complete the flow successfully, you can review the data from the Event Listener and determine exactly what happened to prevent the same issue from occurring again. For more information about what you can receive from the Event Listener, refer to Reviewing your Event Listener data. ### Add the Event Listener to your Integration To add the Event Listener to your Flinks Connect integration, place the following script on the same page as your Flinks Connect widget: ```html html theme={null} ``` ### Reviewing your Event Listener data You'll receive the following types of event data from us: * A JavaScript event, which indicates a user event * A Flinks error code, which indicates an API event Read the lists below for information on what sorts of event data you can receive for both user and API events. We will notify you of the following user events in Flinks Connect: | **EVENT NAME** | **DESCRIPTION** | | :--------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `APP_MOUNTED` | Flinks Connect has retrieved configuration values from the API, and has successfully loaded. | | `APP_ONLINE` | The internet connection was restored to the Flinks Connect application. | | `APP_OFFLINE` | The internet connection to the Flinks Connect application was lost. | | `APP_RESIZE` | The user has resized the Flinks Connect iframe. | | `ACCOUNT_SELECTED` | The user has selected an account to connect. | | `COMPONENT_ACCEPT_CONSENT` | The user has provided consent to share their account data. | | `COMPONENT_ACCEPT_PROVIDER_CONSENT` | The user has provided consent for their financial institution to share their data. | | `COMPONENT_ACCEPT_TERMS` | The user has checked the box to accept the terms and conditions. This is linked in the URL: `termsUrl={https://example.com}`. | | `COMPONENT_CLICK_RESET_PASSWORD` | The user has clicked the password reset button. | | `COMPONENT_CLICK_TERMS_URL` | The user has clicked on the terms and conditions link. | | `COMPONENT_CLOSE_SESSION` | The user has clicked on the close button in the top right corner of the screen. For more information, refer to the `closeEnable` customization parameter. | | `COMPONENT_DENY_CONSENT` | The user has denied consent to share their data. | | `COMPONENT_DENY_TERMS` | The user unchecked the box on the Terms and Conditions screen, using the `termsUrl` customization parameter. | | `COMPONENT_HELP2FA_INFO` | Flinks Connects has either loaded the Help2FA screen, or the user has viewed the troubleshooting screen and has clicked the 'Back' button. | | `COMPONENT_HELP2FA_TROUBLESHOOTING` | The user has clicked on the troubleshooting tips hyperlink and has viewed the troubleshooting page. | | `COMPONENT_LOAD_ACCOUNT_SELECTION` | Flinks Connect has loaded the Account Selection page. This page contains metadata about the user's accounts (`totalAccounts` and `displayedAccounts`). | | `COMPONENT_LOAD_CONSENT` | The consent page has been loaded using the `consentUrl` customization parameter. | | `COMPONENT_LOAD_CREDENTIAL` | The user has been asked to enter their username and password for the account with their financial institution. | | `COMPONENT_LOAD_CREDENTIAL_RETRY` | The user has received an authorization error and has clicked the 'Retry' button. | | `COMPONENT_LOAD_INSTITUTION_SELECTOR` | The user has been shown a list of financial institutions to select. | | `COMPONENT_LOAD_MFA` | The multi-factor authentication (MFA) page has loaded. This page contains metadata that specifies which MFA challenge the user is presented with (`mfaTypes`). | | `COMPONENT_LOAD_MFA_RETRY` | The user has failed the MFA question(s) and has clicked the 'Retry' button. | | `COMPONENT_PROVIDER_CONSENT_ABOUT` | The user has clicked on the 'Tell Me More' hyperlink on the Consent screen. | | `COMPONENT_PROVIDER_CONSENT_INFO` | Flinks Connect has loaded the US OAuth consent screen. | | `COMPONENT_PROVIDER_CONSENT_LEGAL` | The user has clicked on the 'Privacy Policy' hyperlink and has viewed the legal disclaimer. | | `COMPONENT_CONSENT_ABOUT_CLOSE` | The user has viewed the Consent Screen in collapsed view. | | `COMPONENT_CONSENT_ABOUT_OPEN` | The user has viewed the Consent Screen in expanded view. | | `COMPONENT_CONSENT_INTRO` | The user has viewed the Consent Screen with the `consentTitleAppendText` parameter enabled. | | `COMPONENT_CONSENT_PRIVACY` | The user has viewed the Flinks Privacy Statement page. | | `COMPONENT_CONSENT_PRIVACY_OPEN` | The user has clicked the 'Flinks Services Privacy Statement' hyperlink. | | `COMPONENT_CONSENT_PRIVACY_CLOSE` | The user has clicked the close button on the privacy statement page. | | `COMPONENT_BACK_SESSION` | The `backEnable` customization parameter is enabled. | | `COMPONENT_LOAD_UPLOAD` | The user has selected the Flinks Upload screen. | | `UPLOAD_INPUT_CHANGE` | The user has uploaded a file. | | `UPLOAD_SUBMIT` | The user has submitted their file to us. | | `DISABLED_INSTITUTION` | An institution is disabled. | | `ENHANCED_MFA_HAS_QUESTIONS` | There was one or more unanswered MFA questions (when the `enhancedMFA=true` customization parameter is enabled). | | `ENHANCED_MFA_NO_QUESTIONS` | There were no unanswered MFA questions (when the `enhancedMFA=true` customization parameter is enabled). | | `ENHANCED_MFA_SUCCESS` | The user has successfully completed the MFA flow (when the `enhancedMFA=true` customization parameter is enabled). | | `INSTITUTION_SELECTED` | The user has selected their financial institution. | | `INVALID_INSTITUTION` | A financial institution is invalid. | | `INSTITUTION_NOT_AVAILABLE` | A financial institution is not available. | | `INVALID_SECURITY_RESPONSE` | The user has failed the MFA challenge. | | `MAXIMUM_RETRY_REACHED` | The user has reached the maximum number of retries permitted (when the `maximumRetry={number}` customization parameter is enabled). | | `QUESTION_NOT_FOUND` | The MFA challenge is returned by the API. This page contains metadata that specifies which MFA challenge the user is presented with (`mfaTypes`). | | `REDIRECT` | The user has successfully completed the account connection flow and are redirected. | | `RESUME_SELECTED_ACCOUNTS_INVALID` | One or more account IDs passed in [`resumeSelectedAccounts`](./widget#preserve-account-selection-across-reconnect-sessions) were rejected by the backend. Payload includes the attempted `accountId`(s) and the `flinksCode` returned. | | `RETRY_COUNT` | The user has failed the authorization process and the number of retries are recorded, starting from 0. | | `SESSION_NONEXISTENT or SESSION_EXPIRED` | The session has expired. | | `SESSION_STORAGE_BLOCKED` | Legacy cookie management (deprecated). | | `SESSION_STORAGE_BLOCKED_RETRY` | Legacy cookie management (deprecated). | | `SKIP_ENHANCED_MFA` | The user has skipped the unanswered MFA questions (when the `enhancedMFA=true` customization parameter is enabled). | | `SUBMIT_ANSWER_MFA_QUESTIONS` | The user has submitted the unanswered MFA questions. | | `SUBMIT_CREDENTIAL` | The form is valid and the user clicks the 'Continue' button. | | `SUBMIT_GET_MFA_QUESTIONS` | We've received unanswered MFA questions (when the `enhancedMFA=true` customization parameter is enabled). | | `SUBMIT_MFA` | The user has submitted the MFA questions. | | `TOKEN_INVALID` | The authorize token has expired. Generate a new token and reload the iframe. See [Handle token expiry](../authentication-reference#handle-token-expiry-in-flinks-connect). | | `BACK_SECTION` | The user has clicked on the 'Back' button (when the `backEnable` customization parameter is enabled). | | `FEEDBACK` | The user has opted to provide feedback about their connection experience. | | `POPUP_BLOCKED` | The OAuth connection was blocked. | | `POPUP_CLOSED` | The OAuth connection was closed. | | `POPUP_OPENED` | The OAuth connection was initiated. | | `POPUP_UPDATED` | The OAuth connection has been updated. | Additionally, we will notify you of the following API events in Flinks Connect. | **HTTP STATUS CODE** | **FLINKS CODE** | **DESCRIPTION** | **MESSAGE** | **STEPS TO REPRODUCE** | | :------------------- | :----------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | | 200 | `N/A` | The connection was successful. | Complete a successful request. | Complete a successful request. | | 202 | `OPERATION_PENDING` | The process is ongoing in the background. At this point, your flow much change to the async endpoint. | Your operation is still processing. | Perform a cached flow immediately after Authorizing a new account. | | 202 | `OPERATION_DISPATCHED` | Your sync request took more than 210 seconds and it was dispatched in the background. | Your operations had been dispatched to background process for long running jobs. | Have a live request to gather [/GetAccountDetails](/api/connect/endpoints/account-linking/get-accounts-detail) in more than 210 seconds. | | 400 | `SESSION_NONEXISTENT` | A request was made with an expired `requestId`. | Inputs session id or card if were not found. | Use an old `requestId` for a new request. | | 400 | `CARD_IN_USE` | An operation was requested while the account is still being processed. | Call the [/DeleteCard](/api/connect/endpoints/account-linking/delete-card) endpoint immediately after Authorizing a new account. | Call the [/DeleteCard](/api/connect/endpoints/account-linking/delete-card) endpoint immediately after Authorizing a new account. | | 401 | `ACCESS_DENIED` | Authentication was unsuccessful. | | | | 401 | `INVALID_LOGIN` | The provided `loginId` is invalid. | The `loginId` provided is either invalid or does not belong to the customerId. | Call the [/Authorize](/api/authorize/endpoints/authorize) endpoint using a non existent `loginId`. | | 401 | `INVALID_LOGIN` | The provided username or/and password is/are invalid. | The card number (username) or password provided is invalid. | Call the [/Authorize](/api/authorize/endpoints/authorize) endpoint using non valid credentials. | | 401 | `INVALID_REQUEST` | Credentials are missing/incomplete, or syntax is incorrect (e.g. missing comma). | Message returned will depend on the error (e.g. missing value, incorrect syntax, etc.). | In input, make a typo, remove a comma, etc. | | 401 | `INVALID_SECURITY_RESPONSE_NO_RETRY` | The user has provided incorrect or incomplete MFA answers and cannot retry. | | | | 401 | `INVALID_USERNAME` | The username provided was different from what the bank expected. | | Provide an invalid username to an Authorize request. | | 401 | `INVALID_PASSWORD` | The password provided was different from what the bank expected. | | Provide an invalid password to an Authorize request. | | 401 | `INVALID_SECURITY_RESPONSE` | The MFA response provided was different from what the bank expected. | | Provide an invalid MFA answer to an Authorize request. | | 401 | `QUESTION_NOT_FOUND` | The MFA prompt doesn't have a stored answer. | | | | 401 | `RETRY_LATER` | Flinks was not able to open a connection with the selected financial institution. | | | | 401 | `T00_MANY_REQUESTS` | The endpoint has received too many requests in a given amount of time. | | | | 401 | `UNKNOWN_CHALLENGE_KEY` | The `/Authorize` request to respond an MFA contain an answer to the wrong MFA prompt. | "One or more of the Security Challenge Prompts required are missing in the provided response." | Change the MFA prompted, or leave the MFA prompt blank in the input Change the MFA response or leave the MFA response blank. | | 401 | `CONCURRENT_SESSION` | Another session is already opened with this `loginId`. | | Open two requests simultaneously with the same account. | | 401 | `UNAUTHORIZED` | The card was not authorized. Either there is a problem with bank, or the `/GetAccountsDetail` endpoint was called before authorized. | You need to be authorized in the bank account before going further. | Call the `/GetAccountsDetail` endpoint during an MFA prompt without answering the MFA question. | | 401 | `UNHANDLED` | An error was encountered that cannot be handled or processed. | | | | 401 | `DISABLED_LOGIN` | The account has been deactivated by the financial institution. The account holder must contact their bank. | | Log into a deactivated account. | | 401 | `NEW_ACCOUNT` | The end user must take action directly on their online banking before connecting an account with Flinks. | | Login to an account where the user must take action on the bank's website (e.g. to accept a consent form). | | 401 | `SESSION_EXPIRED` | The `requestId` expired after 8 mins of inactivity, during Authorize, or during 30 mins timeout for data processing. | | Wait at least 8 minutes before responding to MFA. | | 401 | `ALREADY_AUTHORIZED` | When the `/Authorize` endpoint is called after the user has already been authorized. | Answer an MFA for an already authorized `requestId`. | Answer an MFA for an already authorized `requestId`. | | 401 | `SECURITYRESPONSES_INCOMPLETE` | Not all the prompted MFA questions had answers in the response request. | Not answer all MFA questions prompted in 3 question MFA prompt. | Not answer all MFA questions prompted in 3 question MFA prompt. | | 404 | `NO_TRANSACTION` | The account does not have any transactions. | No transactions were found. | Perform an Attributes request for an account with no `/GetAccountDetails` previously processed. | | 405 | `DISABLED_INSTITUTION` | The selected financial institution is not available. | | | | 500 | `AGGREGATION_ERROR` | Flinks had an unexpected error and could not process your request. | | | | 501 | `METHOD_NOT_AVAILABLE` | The requested API is not currently enabled in your instance. Kindly contact us if you wish to use this feature. | | | For information about how Flinks Connect handles common errors and their corresponding events, see [Handled Errors](./handled-errors). ## Examples ### A successful connection journey In a typical successful connection, the events fire in roughly this order. Listening for them lets you track where each user is in the flow and measure drop-off between steps: | Order | Event | What just happened | | :---- | :------------------------------------ | :------------------------------------------------------------- | | 1 | `APP_MOUNTED` | Flinks Connect loaded | | 2 | `COMPONENT_LOAD_INSTITUTION_SELECTOR` | The institution list was shown | | 3 | `INSTITUTION_SELECTED` | The user picked their financial institution | | 4 | `COMPONENT_LOAD_CREDENTIAL` | The user was asked for their credentials | | 5 | `COMPONENT_LOAD_MFA` | An MFA challenge was presented (if required) | | 6 | `COMPONENT_ACCEPT_CONSENT` | The user consented to share their data | | 7 | `ACCOUNT_SELECTED` | The user selected an account (if `accountSelectorEnable=true`) | | 8 | `REDIRECT` | The connection succeeded and the `loginId` is available | The final `REDIRECT` event is where you capture the `loginId` (and `accountId`) to continue on the back end: ```json Json theme={null} { "step": "REDIRECT", "institution": "FlinksCapital", "url": "https://example.com/thank-you?loginId=8b35f6c8-e7b6-41d3-98f8-08d68b7f8d31&institution=FlinksCapital" } ``` ### Diagnosing a missing-credentials issue When a user can't get past the credentials step, the event stream tells you why. A loop of `COMPONENT_LOAD_CREDENTIAL` → error → `COMPONENT_LOAD_CREDENTIAL_RETRY` points to invalid credentials, while the MFA equivalents point to failed challenges. Correlate the event with the [API event](#api-events) returned at the same time: | Event observed | Likely API code | Meaning | | :------------------------------------------------------- | :-------------------------------------- | :------------------------------------------------------------ | | `COMPONENT_LOAD_CREDENTIAL_RETRY` | `INVALID_USERNAME` / `INVALID_PASSWORD` | The username or password did not match what the bank expected | | `COMPONENT_LOAD_MFA_RETRY` / `INVALID_SECURITY_RESPONSE` | `INVALID_SECURITY_RESPONSE` | The MFA answer was incorrect | | `MAXIMUM_RETRY_REACHED` | n/a | The user exhausted the allowed retries (`maximumRetry`) | | `SESSION_NONEXISTENT or SESSION_EXPIRED` | `SESSION_EXPIRED` | The `requestId` expired (8 minutes of inactivity) | Use these signals to show the user a targeted message (for example, "Double-check your username" on repeated `COMPONENT_LOAD_CREDENTIAL_RETRY`) instead of a generic error. # White-labelling Flinks Connect Source: https://docs.flinks.com/guides/connect/flinks-connect/white-labelling Co-brand the Flinks Connect iframe across all four screens of the flow so it blends seamlessly into your product. You can co-brand Flinks Connect so it blends into your product. This guide walks through the four stages of the flow and the parameters that control branding at each. For the full list of every parameter and its default value, see the [Widget Parameters](./widget#customize-your-flinks-connect-widget) reference. For a fully-hosted, no-code branded experience, also consider [Flinks Express](/guides/connect/flinks-express), a template we fully customize with your branding and host on your behalf. The end user moves through four screens: the consent page, financial institution selection, authentication/MFA, and the success page. Each stage below explains how to blend it into your brand. ## 1. Consent page By default, Flinks Connect shows its own consent screen listing the data the connection will access. To host your own branded consent or landing page instead, bypass the default screen with `consentEnable=false`. ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?consentEnable=false ``` This lets you present consent within your own design system, before the widget loads.

Hosting your own consent page is a compliance requirement

If you replace Flinks' default consent screen with your own, you **must** include the three required transparency disclosures: 1. **What information is collected** from the end user. 2. **How that data is shared** with your organization. 3. **The user's privacy choices.** Your consent page must also include agreement language referencing the **Flinks Services Privacy Statement**. This is mandatory: you cannot disable the default consent screen without providing a compliant replacement.
## 2. Financial institution selection On the institution selection screen, remove the Flinks logo from the header so it doesn't compete with your branding. Use `headerImgEnable=false`: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?headerImgEnable=false ``` Then wrap the iframe in your own parent container that displays your logo and branding around it. The iframe renders your users' institution options while your surrounding page carries your identity. The security message shown to users must remain visible. Do not hide or obscure it in your wrapper. ## 3. Authentication / MFA The credentials and multi-factor authentication (MFA) screens inherit the same configuration from the institution selection step. No additional parameters are needed. Your branded wrapper persists throughout, and the header and consent settings you applied earlier continue to apply. ## 4. Success page After a successful connection, send users to your own branded success page instead of the generic Flinks thank-you page. Use `redirectUrl`: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?redirectUrl=https%3A%2F%2Fexample.com%2Fthank-you ``` Remember to URL-encode the redirect URL, including any parameters specific to your landing page.

Whitelist your redirect domain before go-live

The domain used in `redirectUrl` **must** be whitelisted by Flinks before go-live. Share it with us by opening a support ticket. If the domain is not whitelisted, the iframe fails to load entirely and the URL updates to an error state: ``` https://instance-iframe.private.fin.ag/v2/Error?validRedirectUrl=false ``` Also remember to **URL-encode** the redirect URL and any of its parameters.
## Quick reference | **PARAMETER** | **VALUE** | **EFFECT** | | :---------------- | :-------------- | :------------------------------------------------------------ | | `consentEnable` | `false` | Bypasses the default consent screen so you can host your own | | `headerImgEnable` | `false` | Removes the Flinks logo from the header | | `redirectUrl` | `{encoded URL}` | Redirects to your own branded success page after a connection | For the complete list of parameters, default values, and valid values, see the [Widget Parameters](./widget#customize-your-flinks-connect-widget) reference. ## Next steps The full reference for every Flinks Connect customization parameter. A fully-hosted, no-code branded experience we manage on your behalf. Tips to maximize conversion and build trust with your customers. # Flinks Connect Widget Parameters Source: https://docs.flinks.com/guides/connect/flinks-connect/widget Configure and customize your Flinks Connect widget using iframe URL parameters. ## What your customers will see The following widget is embedded into your site as an iframe. Choose from a variety of customization parameters to change the design of your screens to fit your brand experience. Click through the screens below and configure the first version of your Flinks Connect widget. Flinks Connect is supported by the following browsers: * Chrome * Safari * Firefox * Opera * Microsoft Edge ## Customize your Flinks Connect widget The design and functionality of your Flinks Connect screens are controlled by parameters in the iframe URL. Enable (or disable) components by updating the parameters in the URL. Here's an example: ```html html theme={null} https://toolbox-iframe.private.fin.ag/v2/?demo=true&redirectUrl=https://www.example.com/thank-you ``` ### Use the most recent version The latest version of the Flinks Connect design is version t2. Enable this version by adding /v2/ to your iframe URL: ```url Url theme={null} https://toolbox-iframe.private.fin.ag/v2/ ```

Already using version 1?

If you're an existing customer using version 1, this is still accessible to you without specifying a version.
### Pass an authorize token Pass a valid [authorize token](../../../api/authorize/endpoints/generate-authorize-token) every time you authenticate. If you are using Flinks Connect, this parameter must be included in your iframe URL. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | VALID VALUES | | :--------------- | :------- | :---------------- | :----------- | | `authorizeToken` | string | false | `{string}` | ## List of customization parameters The following table lists all customizations you can make to your Flinks Connect widget. Click on each section for more information on adding it to your iframe URL. | **CUSTOMIZATION** | **PARAMETER** | | :----------------------------------------------------------------------------------- | :--------------------------------------- | | Enable our dummy institution, Flinks Capital, for testing purposes in Flinks Connect | `demo` | | Enable our dummy institution, Flinks Capital, for OAuth connections in Outbound | `demoOutbound` | | Change the language on the screens to French or English | `language` | | Set the color theme (light, dark, or follow the user's OS preference) | `theme` | | Add or remove a “Close” button to allow the user to exit the widget | `closeEnable` | | Add or remove a “Back” button to allow the user to return to previous screens | `backEnable` | | Add or remove the Flinks logo in the header | `headerImgEnable` | | Add or remove the header section, including the Flinks logo and all text | `headerEnable` | | Add or remove a static loading page | `staticLoadingEnable` | | Add or remove padding | `removePadding` | | Add or remove the Consent screen | `consentEnable` | | Customize the title on the Consent screen | `consentTitleAppendedText` | | Add your logo to the Consent screen | Contact your Flinks Representative | | Preselect specific financial institution(s) on the Login screen | Use the institution ID or routing number | ### Enter demo mode for testing purposes Show our dummy institution, Flinks Capital, as an available institution to select for testing purposes. #### Flinks Connect | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | demo | boolean | false | true, false | To show Flinks Capital, include `demo=true` in your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?demo=true ``` #### Outbound (oAuth connections) | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------- | :------- | :---------------- | :--------------- | | `demoOutbound` | boolean | false | true, false | To test Flinks Capital through the OAuth flow, include `demoOutbound=true` in your iframe URL. This routes the demo institution through the OAuth screens. For the full walkthrough, see [Simulate an OAuth flow in the Toolbox](/guides/connect/oauth-integration#simulate-an-oauth-flow-in-the-toolbox). ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?demoOutbound=true&authorizeToken={token} ``` ### Change the language Flinks Connect supports both English and French, but will display English on all screens by default. When you change the language, all screens, including multi-factor authentication (MFA), will display the new language. To switch all screens to French, use the `language` parameter. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | language | string | en | en, fr | To use French on your Flinks Connect screens, add language=fr to the iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?language=fr ``` ### Set the color theme By default, Flinks Connect renders with a light theme. Use the `theme` parameter to switch to a dark theme or follow the end user's OS preference. The setting applies to all widget screens: consent, institution selection, credentials, MFA, account selector, success, errors, upload, and bottom sheets. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :------------------------ | | `theme` | string | `light` | `light`, `dark`, `system` | * `light`: standard light theme (identical to omitting the parameter). * `dark`: dark theme with inverted palettes and adjusted contrast. * `system`: follows the end user's OS dark mode preference and switches in real time if it changes. Institution-specific branding colors (such as bank logos) are preserved across all themes. For example, to render the widget in dark mode, add `theme=dark` to the iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?theme=dark ``` To follow the end user's OS preference: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?theme=system ``` ### Customize the page layout This section lists the page elements you can choose to include in your Flinks Connect integration or forego. #### Add or remove a 'Close' button Use the `closeEnable` parameter to specify if you want to display a 'Close' button on your Flinks Connect screens. One is not included by default. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | `closeEnable` | boolean | false | true, false | For example, to display a 'Close' button, add `closeEnable=true` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?closeEnable=true ``` #### Add or remove a 'Back' button Use the `backEnable` parameter to specify if you want to display a 'Back' button on your Flinks Connect screens. We include this by default, but it can be removed. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | `backEnable` | boolean | false | true, false | For example, to remove the 'Back' button from your Flinks Connect screens, add `backEnable=false` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?backEnable=false ``` #### Add or remove the Flinks logo in the header Use the `headerImgEnable` parameter to specify if you want to display the Flinks logo on your Flinks Connect screens. We display it by default, but it can be removed. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :---------------- | :------- | :---------------- | :--------------- | | `headerImgEnable` | boolean | true | true, false | For example, to remove the Flinks logo, add `headerImgEnable=false` in your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?headerImgEnable=false ``` #### Add or remove the header section Use the `headerEnable` parameter to specify if you want to include a header section on your Flinks Connect screens. By default, we display a header section with the Flinks logo and customizable text. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------- | :------- | :---------------- | :--------------- | | `headerEnable` | boolean | true | true, false | For example, to remove the header section, add `headerEnable=false` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?headerEnable=false ``` #### Add or remove a static loading page Use the `staticLoadingEnable` parameter to specify if you want to display a static loading page. We don't include this by default, but you can choose to add it into your integration. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------------- | :------- | :---------------- | :--------------- | | `staticLoadingEnable` | boolean | false | true, false | For example, to display a static loading screen, add `staticLoadingEnable=true` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?staticLoadingEnable=true ``` #### Add or remove padding Use the `removePadding` parameter to specify if you want to add or remove padding on your Flinks Connect screens. All screens have padding by default, but it can be removed. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------- | :------- | :---------------- | :--------------- | | `removePadding` | boolean | false | true, false | For example, to remove padding from the screens, add `removePadding=true` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?removePadding=true ``` ### Customizing the Consent screen Choose whether or not to display the Consent screen in your Flinks Connect integration and customize various elements on it. #### Add or remove the Consent screen Use the `consentEnable` parameter to specify if you want to include a Consent screen in your Flinks Connect integration. This screen lists every type of data that the application needs access to, and requires the end-user to provide consent before sharing their financial data. This screen is included in your integration by default, but can be removed. When enabled (the default), the Consent screen is the first screen the user sees when the widget loads. When disabled, the user lands on the institution list, or directly on the Credential page if you pass an institution id. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------- | :------- | :---------------- | :--------------- | | `consentEnable` | boolean | true | true, false | For example, to disable the Consent screen, add `consentEnable=false` to your iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?consentEnable=false ``` This is what your users will see if you choose to enable the Consent screen (collapsed view): Screenshot of the collapsed view of the user consent screen in Flinks Connect The Consent screen (expanded view): Screenshots of the expanded view(s) of the user consent screen in Flinks Connect By default the Consent screen has the following title: Screenshot of the default title on the user consent screen in Flinks Connect Use the `consentTitleAppendedText` parameter to change the title on the Consent Screen. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------------------- | :------- | :---------------- | :--------------- | | `consentTitleAppendedText` | string | none-set | | #### Add your logo to the Consent screen By default, the Consent Screen displays the Flinks logo at the top of the page, but you can customize the screen by adding your own company logo as well. Here's what it looks like: Screenshot of Flinks Connect configured to include a custom logo To add your logo to the Consent Screen in Flinks Connect, contact your Flinks Representative. ### Customizing the Institution Login screen This is how the Institution Login screen looks by default: Screenshot of the login page on Flinks Connect. The user is logging in to an account with the default institution, Flinks Capital #### Preselect a specific financial institution Set up your Flinks Connect integration so that it loads on the login page of a particular financial institution, skipping the Financial Institution Selection screen. There are two ways you can do this: * By institution ID * By routing number #### Preselect by Institution ID 1. Determine the ID of the financial institution you want to preselect using the [/Institutions](/api/connect/endpoints/account-linking/institutions) endpoint. 2. Update your iframe URL with the following structure: `https://[iframe-instance]/Credential/[Institution-ID]` For example, to load your Flinks Connect integration on Chase's login page, add `Credential/20` to your iframe URL: ```url Url Example theme={null} https://toolbox-us-iframe.private.fin.ag/v2/Credential/20 ``` #### Preselect by routing number This option is only available for certain US financial institutions. For a full list of available routing numbers, call the [Institutions API](../../../api/connect/endpoints/account-linking/institutions). 1. If the financial institution you want to preselect is US-based, determine if the routing number is supported by calling the /Institutions endpoint. 2. Update your iframe URL with the following structure: ```url Url theme={null} https://[iframe-instance]/Credential/[routing-number]/?[parameters]&routingNumber=true ``` For example, to load your Flinks Connect integration on Chase's login page, add their routing number (071000770) to your iframe URL: ```url Url Example theme={null} https://toolbox-us-iframe.private.fin.ag/v2/Credential/071000770?routingNumber=true ```

Only available for certain US financial institutions

If the routing number is not associated with a financial institution in our system, an error message will display to the user, and they'll be redirected back to the Financial Institution Selection screen.
#### Add or remove term and conditions #### Terms and conditions | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------------ | :------- | :---------------- | :--------------- | | `termsUrl` | string | none-set | `{string}` | | `termsNoCheckbox` | boolean | false | true, false | | `customerName` | string | none-set | `{string}` | | `termsTextPreLink` | string | none-set | `{string}` | | `termsTextLink` | string | none-set | `{string}` | | `termsTextPostLink` | string | none-set | `{string}` | If the end user has not accepted your service's terms and conditions in a previous step, you will need to add them on the institution Login Page. You can do so using the following parameters: * `termsUrl`: display the URL of your service terms, so your user can access them from the Institution Login Page. * `termsNoCheckbox=true`: if set, this parameter will remove the checkbox but still show the terms and conditions text. * `customerName`: display name of your company. It appears on the Consent screen, on the Institution Login Page terms sentence (when `termsUrl` is set), and on the Success page. * `termsTextPreLink`: text displayed in the terms and conditions before the link. * `termsTextLink`: text displayed in the terms and conditions link. * `termsTextPostLink`: text displayed in the terms and conditions after the link. Screenshot of the login page on Flinks Connect. The user is logging in to an account with the default institution, Flinks Capital ### Enhanced Multi-factor Authentication (Deprecated) | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :----------------- | :------- | :---------------- | :--------------- | | `enhancedMFA` | boolean | false | true, false | | `skipEnhancedMFA` | boolean | false | true, false | | `withMFAQuestions` | boolean | false | true, false |

These parameters are deprecated

Enhanced MFA is no longer an actively supported feature. Most Canadian financial institutions have moved to one-time passwords and push notifications, which cannot be answered automatically. Do not use these parameters in new integrations. For refreshing account data, implement a user-initiated reconnection flow instead. See the [Reconnect](/guides/connect/resume-and-reconnect) guide for more details.
### Redirect (mandatory for OAuth connectivity) | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------- | :------- | :---------------- | :------------------------------------------------------- | | `redirectUrl` | string | not-set | `{string URL}` (ex: `https://www.example.com/thank-you`) | | `innerRedirect` | boolean | false | true, false | | `jsRedirect` | boolean | false | true, false | | | | | | Flinks Connect will redirect the end user to a landing page once their account is successfully connected. We recommend setting the Redirect URL to your custom landing page, which can be a Thank You page or a landing page specific to the next step in your process. Any parameters you have specified in your landing page URL must be encoded.

redirectUrl whitelisting

As an added layer of security, Flinks requires that the domain name used in the redirectUrl parameter be shared with us so we can whitelist it. Failure to share this information could prevent Flinks Connect to load entirely and result in displaying the following message: The iframe URL will also update to the following: [https://instance-iframe.private.fin.ag/v2/Error?validRedirectUrl=false](https://instance-iframe.private.fin.ag/v2/Error?validRedirectUrl=false)

Parameters in your Redirect URL

You must encode all parameters that are specific to your landing page URL. ✔️ Good usage: redirectUrl=https%3A%2F%2example.com%2F%3FurlEncoded%3Dtrue ❌ Bad usage: redirectUrl=[https://example.com/?urlEncoded=true](https://example.com/?urlEncoded=true)
If the parameter `redirectUrl` is not specified, a generic thank you page will be displayed. ### Account Selection | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------------------- | :------- | :---------------- | :--------------- | | `accountSelectorEnable` | boolean | false | true, false | | `accountSelectorMultiple` | boolean | false | true, false | | `fetchAllAccounts` | boolean | false | true, false | | `accountSelectorNoTitle` | boolean | false | true, false | | `eftEligibleRatio` | number | 0.8 | `0.0` to `1.0` | | `showAllOperationsAccounts` | boolean | false | true, false | | `accountSelectorCurrency` | string | cad, usd | cad, usd | Add the parameter `accountSelectorEnable=true` to enable the Account Selection feature in Flinks Connect. After a successful authorization with the financial institution, Flinks Connect will prompt to the end user a summary of operations accounts that are eligible for `Electronic Funds Transfer (EFT)`. If you want to present your end user all operations accounts, even those not eligible for EFT, use the parameter `showAllOperationsAccounts=true`. Screenshot of the Flinks Connect UI. The user is asked to select between two of their BMO accounts In the case where the text Please select an account does not fit into your use-case, you can remove it by using the parameter `accountSelectorNoTitle=true`, and any other desired copy can be added just before your iframe. Example of the redirected URL when the Account Selector is enabled: ```shell Shell theme={null} https://example.com/thank-you/?loginId=f5d5f008-e529-4714-21c0-08d6abf5bce4&accountId=81cea6a2-b156-49d9-3e9c-08d6abf5c58e&institution=FlinksCapital ``` Example of the JS event for a selected account: ```json Json theme={null} { "accountId": ["7d213d26-d966-4229-8774-08d731543898"], "institution": "FlinksCapital", "step": "ACCOUNT_SELECTED" } ```

Accounts details for selected accounts

By default, Flinks Connect only collects the details of the selected accounts, but it is possible to still gather all account details by specifying the parameter fetchAllAccounts=true.
#### Display all account To display accounts from all categories for selection, including the ones that are not eligible for transfers (EFT), use the parameter `showAllAccounts=true`. Note that when this parameter is used, other operation accounts filters such as `eftEligibleRatio` and `showAllOperationAccounts` are ignored. #### Multiple selection By default, only a single account can be selected. In order to enable multiple accounts to be selected, the parameter `accountSelectorMultiple=true` needs to be set. Example of a redirected URL when multiple accounts are selected: ```shell Shell theme={null} https://example.com/thank-you/?loginId=af9c2f59-461f-40cd-d383-08d731541b7b&accountId=7d213d26-d966-4229-8774-08d731543898,9290ca11-8352-4e88-8775-08d731543898&institution=FlinksCapital ``` Example of a JS event for new multiple accounts: ```json Json theme={null} { "accountId": [ "7d213d26-d966-4229-8774-08d731543898", "9290ca11-8352-4e88-8775-08d731543898" ], "institution": "FlinksCapital", "step": "ACCOUNT_SELECTED" } ``` When this feature is enabled, the `AccountId` of the selected account is going to be included in the redirected URL and the Event Listener, along with the `loginId`. #### Preserve account selection across Reconnect sessions Use `resumeSelectedAccounts` to carry an end user's previously selected accounts into a [Reconnect](/guides/connect/resume-and-reconnect) session. Flinks Connect skips the Account Selection screen, applies the filter on the backend, and includes the IDs in the `REDIRECT` event and redirect URL, bringing Reconnect to parity with the initial-session contract for `accountSelectorEnable` and `accountSelectorMultiple`. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :----------------------- | :------- | :---------------- | :---------------------------------- | | `resumeSelectedAccounts` | string | none-set | comma-separated list of account IDs | This parameter applies to Reconnect sessions only. It has no effect on initial sessions. To resume a session with previously selected accounts, pass them as a comma-separated list: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?requestId={requestId}&resumeSelectedAccounts=0001,0002,0003 ``` If the backend rejects any of the listed IDs, the end user is routed to the Credential page and the [`RESUME_SELECTED_ACCOUNTS_INVALID`](./use-event-listener#resume_selected_accounts_invalid) event is emitted with the attempted IDs. #### End-to-end example: filter to a selected account This example ties the Account Selection front end to the API back end, so you retrieve data for only the account your end user picked. Launch the iframe with `accountSelectorEnable=true`. After authorization, the end user picks an account and you capture both the `loginId` and the selected `accountId` from the redirect URL (or the `ACCOUNT_SELECTED` event): ```shell Shell theme={null} https://{instance}-iframe.private.fin.ag/?accountSelectorEnable=true&showAllOperationsAccounts=true&demo=true ``` ```text Redirect URL theme={null} https://example.com/thank-you/?loginId=f5d5f008-e529-4714-21c0-08d6abf5bce4&accountId=81cea6a2-b156-49d9-3e9c-08d6abf5c58e&institution=FlinksCapital ``` Call [/Authorize](/api/authorize/endpoints/authorize) with your instance, `customerId`, and the captured `loginId` to obtain a `requestId`. Call [/GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail) with the `requestId`. By default, Flinks Connect only collected the selected account, so the response is already filtered. To be explicit, or when you used `fetchAllAccounts=true`, pass the captured `accountId`(s) in the `AccountsFilter` array: ```json Json theme={null} { "RequestId": "{requestId}", "AccountsFilter": ["81cea6a2-b156-49d9-3e9c-08d6abf5c58e"] } ``` #### Range of transactions | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------------- | :------- | :---------------- | :--------------- | | `daysOfTransactions` | string | Days90 | Days90, Days365 | | `withTransactions` | boolean | true | true, false | By default, Flinks Connect extracts Transactions history data for the last 90 days. It is possible to increase the range to a full year, or configure it to avoid extracting transactions altogether. To increase the range to a full year, you need to specify the parameter `daysOfTransactions=Days365`. If you do not need to collect the transaction history, specify the parameter `withTransactions=false`. #### Bank issued PDF statements | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------------------- | :------- | :---------------- | :---------------------------- | | `detailsAndStatementEnable` | boolean | false | true, false | | `monthsOfStatements` | string | Months3 | MostRecent, Months3, Months12 | For setting a connection to additionally extract bank-issued monthly PDF statements file, the parameter `detailsAndStatementEnable=true` is required. When enabled by default, the last 3 months of statements will be extracted. However, up to 12 months of statements can be retrieved by using the parameter `monthsOfStatements`.

We will unlock that for you

If you want to use this feature, please contact our support so we can enable it in your private instance.
#### Nightly refreshes (Deprecated) | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :---------------- | :------- | :---------------- | :--------------- | | `scheduleRefresh` | boolean | false | true, false |

Nightly Refresh is no longer actively supported

Automatic nightly refresh is no longer supported for most financial institutions. Do not use `scheduleRefresh` in new integrations. To refresh account data, the end-user must be present and complete a live connection through Flinks Connect. See the [Nightly Refreshes (Deprecated)](/guides/connect/nightly-refresh) page for details and alternatives.
#### Tag | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | `tag` | string | none-set | string | Custom tags let you attach your own reference data to a connection request so you can reconcile Flinks `loginId`s with records on your side: for example, an internal user ID, a campaign name, or a workflow reference.

Never include personal information (PII) in tags

Tag values are passed through URLs, logs, and webhook payloads. They are **not** a secure channel. Do not include any PII, such as: * Email addresses * Phone numbers * Full names * Dates of birth * Government IDs (SIN, SSN, driver's license, etc.) * Physical or mailing addresses Use an opaque identifier (e.g., your own `userId` as a GUID) that maps back to PII inside your own systems.
To set a tag, pass the `tag` parameter in your Flinks Connect iframe URL: ```url Url Example theme={null} https://toolbox-iframe.private.fin.ag/v2/?tag=userId=8b35f6c8-e7b6-41d3-98f8-08d68b7f8d31 ``` #### MaximumRetry | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------- | :------- | :---------------- | :--------------- | | `maximumRetry` | integer | 99 | 1 to 99 | By default, Flinks Connect doesn't limit the number of times the end user can attempt to enter their login credentials. You can limit these attempts in order to prevent your end user from being locked out of their account for entering the wrong credentials too many times. Specify the maximum number of attempts by using the parameter `maximumRetry`. #### Stringify | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | `stringify` | boolean | false | true, false | If you need to have all your events from the Event Listener as strings instead of JSON, specify the parameter `stringify=true`. #### Inputs | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :----------------- | :------- | :---------------- | :--------------- | | `preventAutoFocus` | boolean | false | true, false | | `preventAutoFill` | boolean | false | true, false | By default, Flinks Connect allows auto-complete functionality on input fields. As well, Flinks Connect will automatically focus input fields that require user action. If either of these behaviours causes issues in your app, they can be disabled by using `preventAutoFocus=true` and `preventAutoFill=true`. ### Webview | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------ | :------- | :---------------- | :--------------- | | `webview` | boolean | false | true, false | When set to `true`, Flinks Connect emits events through `window.ReactNativeWebView.postMessage` instead of `window.postMessage`. Use this parameter when loading Flinks Connect inside a native mobile WebView (iOS, Android, or React Native). For detailed setup instructions, see [Mobile Integration](/guides/connect/mobile-integration). ### Institution filter | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------------------ | :------- | :---------------- | :--------------- | | `institutionFilterEnable` | boolean | false | true, false | When enabled, displays a search/filter bar on the institution selection screen, allowing users to quickly find their financial institution by name. This is recommended when your integration supports a large number of institutions. ### Flinks Upload [Flinks Upload](../../upload/flinks-upload#flinks-upload) is a feature that you can enable in Flinks Connect to process and extract data from a bank statement or void cheque. By default, Flinks Connect displays a title and subtitle on the upload screen: Screenshot of the Flinks Connect UI. The user is asked to upload bank statements for the dummy institution, Flinks Capital. To customize the text on this screen, use the following parameters: | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :------------------- | :------- | :---------------- | :--------------- | | `fileUploadTitle` | string | none-set | `{string}` | | `fileUploadSubtitle` | string | none-set | `{string}` | For more information about the types of files you can upload and what this feature supports, see [What can I upload?](../../upload/flinks-upload#what-can-i-upload).

This feature must be switched on

To start using Flinks Upload, contact your Flinks Representative, and we will enable it for you.
### Enable full page redirects This parameter is useful if you're loading Flinks Connect as the top-level window (or in web view) and are noticing that the iframe is blocking pop-ups. Use the `oauthWindowRedirect=true` parameter to enable a full page redirect rather than relying on pop-up behaviour. If Flinks Connect is loading inside an iframe, passing this parameter will not work. | **PARAMETER** | **TYPE** | **DEFAULT VALUE** | **VALID VALUES** | | :-------------------- | :------- | :---------------- | :--------------- | | `oauthWindowRedirect` | boolean | false | true, false | # Flinks Express Source: https://docs.flinks.com/guides/connect/flinks-express Flinks Express is the fastest way to integrate with us to connect end-user accounts. It's a hosted solution that we manage on your behalf, but design it to look like your website. It's a template that we fully customize with your branding and logos. We recommend this integration option if you don't have any in-house development resources or do not want to build it into your site. ## How Flinks Express works Flinks Express directs the user to a website that prompts them to perform the following actions to connect their financial accounts: 1. Validate their identity. 2. Review the scope of data that your services require them to share. 3. Select their financial institution, then enter their username and password to log in with their financial institution. 4. Answer a multi-factor authentication (MFA) question if their financial institution requires them to. 5. Select the account they want to share. We add your branding to the website so it looks like it’s part of your corporate site, but it's owned and hosted entirely by Flinks. Using Flinks Express is the fastest way to integrate with us and does not require any coding work. ## What your customers will see When you use Flinks Express, this is what your customers will see:
Accounts verification screen on the Flinks Express UI
## Set up Flinks Express Flinks Express is the fastest way to integrate with us to connect end-user accounts. It's a hosted solution that we manage on your behalf, but we design it to look like your website. At a high level, the following steps are required to set up Flinks Express: 1. Contact your Flinks representatives to let them know when you would like to integrate via Flinks Express. 2. A form will be provided so you can specify how you want to customize your Flinks Express configuration. 3. Flinks uses the customizations you've requested to build your Flinks Express instance, then provides you with the link to it. 4. Review your completed Flinks Express configuration. # Getting Started with Connect Source: https://docs.flinks.com/guides/connect/getting-started On this page, you will find instructions on how to set up Flinks Connect and Flinks Express. Flinks supports Multi-Factor Authentication (MFA) for all supported financial institutions. MFA prompts are handled automatically within Flinks Connect. Your customers may be asked to answer security questions, enter a verification code, or complete other challenges depending on their bank's requirements. ## Choose a product The first step to connecting your customer accounts is choosing a front-end solution: [Flinks Connect](./flinks-connect/flinks-connect) or [Flinks Express](./flinks-express).
| **FLINKS PRODUCT** | **CONNECTS CUSTOMER ACCOUNTS** | **CUSTOMIZABLE FOR YOUR BRAND** | **EMBEDDED IN YOUR SITE** | **CODING WORK REQUIRED** | | :----------------- | :----------------------------- | :------------------------------ | :------------------------ | :----------------------- | | Flinks Connect | | | | | | Flinks Express | | | | |
For the full write-up of each option, see [Choose a Front-End Solution](./choose-a-frontend-solution). ## Complete the general integration steps Complete the following to set up your product: 1. Set up your environments. 2. Connect to our APIs. 3. Complete your product-specific integration steps (you can find these in the following section). 4. Access your Flinks Dashboard. 5. Complete testing. ## Set up your Connect product Complete one of the following sections to set up your Connect product: * [Set up Flinks Connect](./getting-started#set-up-flinks-connect) * [Set up Flinks Express](./getting-started#set-up-flinks-express) ### Set up Flinks Connect At a high level, the following steps are required to set up Flinks Connect: 1. Configure and install Flinks Connect. 2. Complete the general integration steps. 3. Set up the iframe URL parameters. 4. Set up your website or app to allow pop-ups to open. 5. Use the `redirectUrl` parameter to allow Flinks to bring the end user back to your page after completing the authorization flow. 6. (Optionally) Set up an event listener to keep track of each user's events in the iframe. See [Use an Event Listener](./flinks-connect/use-event-listener). 7. After the end user successfully connects their account, Flinks Connect provides a `loginId` that allows you to access the data connected for that particular user through our APIs. Save the `loginId` by securely storing it in your servers. Do not make a `loginId` public. 8. (Optionally) If your use-case requires it, Flinks provides the /DeleteCard endpoint that allows you to delete the `loginId` and end all user data that's associated with it. 9. Set up the back-end solution. 10. (Optionally) Choose data enrichment add-ons to collect powerful insights on the customer data. 11. Securely receive the customer's data by using the `requestId`. ### Set up Flinks Express Flinks Express is the fastest way to integrate with us to connect end-user accounts. It's a hosted solution that we manage on your behalf, but we design it to look like your website. At a high level, the following steps are required to set up Flinks Express: 1. [Contact your Flinks representatives](/guides/support/contact-flinks) to let them know when you would like to integrate via Flinks Express. 2. A form will be provided so you can specify how you want to customize your Flinks Express configuration. 3. Flinks uses the customizations you've requested to build your Flinks Express instance, then provides you with the link to it. 4. Review your completed Flinks Express configuration. ## Set up a custom API integration

Custom integrations only

This section explains how to set up custom integrations that use a direct API connection. If you are using Flinks Connect, this section does not apply to you.
Complete the following steps to connect with us using a custom API integration that uses OAuth 2.0. 1. Ask your Flinks Representative to whitelist the URLs that your endpoints will be calling, including the redirect URL in step 2ii. 2. Call the [/OAuth/Authorize](../../api/authorize/custom/oauth-authorize) endpoint and perform the following tasks: * Redirect the end-user to their bank’s login screen using the `institution` parameter. Here, they’ll enter their login credentials and complete multi-factor authentication (MFA) if required. * Provide a URL to direct the end-user’s screen back to your website or app using the `redirect_uri` field. If the login is successful, you’ll receive a redirect response that contains the redirect URL, a `loginId`: ```json Json theme={null} https://{redirect}?loginId={loginId}&state={state} ``` * If unsuccessful, you’ll receive a redirect response that contains a redirect URL and an error message: ```json Json theme={null} https://{redirect}?state={state}&error={error}&error_description={error_description} ``` 3. Call the [/Authorize](/api/authorize/endpoints/authorize) endpoint and apply the following settings to initiate the authorization flow: * Pass the `loginId` that you received in step 2. * Make the call in live mode by setting the `MostRecentCached` parameter to `FALSE`. * Set the `save` parameter to `TRUE` to maintain communication with the database (to do nightly refreshes, receive insights and more). 4. If you receive a 200 response, the end-user is successfully authenticated, and you can now use Flinks APIs to retrieve data. # Legacy API Integrations Source: https://docs.flinks.com/guides/connect/legacy-api-integrations Reference guide for legacy API integrations using /Authorize, replaced by Flinks Connect.

Disclaimer

Please be mindful that this session addresses a legacy type of integration with Flinks. The following articles are mostly to support customers who already live with this methodology. Flinks Connect was developed to replace this integration and solve the following challenges: * Increase conversion rate. * Avoid maintenance efforts on your side to account for authentication flow changes by the financial institution. * It includes support for our new OAuth connections which is not the case with the legacy flow.
## /Authorize

This is only required for legacy integrations

This is only required if you are using a legacy integration (that does not support OAuth 2.0). If you are using a custom integration that supports OAuth 2.0, see Custom Integrations.
### Generating a new requestId All retrieval of data starts with a new session being initiated. For that, you need to generate a new requestId with Flinks by calling `/Authorize`. For custom integrations, all credentials handling between Flinks and the Financial Institution is controlled by `/Authorize` in live mode (when using MostRecentCached:false), and any Multi-Factor Authentication (MFA) prompts need to also be handled.

Integrating with Flinks Connect?

Integrations that use Flinks Connect for handling user banking authentication, use `/Authorize` in cached mode, by only specifying the parameter `"MostRecentCached": "true"` and `LoginId`, as you need to retrieve already processed data. More details can be found here.
When handling a custom integration, a typical `/Authorize` initial request body would look like this: ```json Json theme={null} { "Institution": "FlinksCapital", "username": "Greatday", "Password": "Everyday", "MostRecentCached": false, "Save": true } ``` ### Multi-Factor Authentication Most financial institutions implement Multi-Factor Authentication, which can be prompted after the first credential pair (username and password) is submitted via `/Authorize`. Here is an example of a simple MFA prompt response: ```json Json theme={null} { "Links": [ { "rel": "Authorization", "href": "/Authorize", "example": null } ], "HttpStatusCode": 203, "SecurityChallenges": [ { "Type": "QuestionAndAnswer", "Prompt": "What shape do people like most?" } ], "Institution": "FlinksCapital", "RequestId": "9022abc2-8a2e-4b06-a06e-c3e5449c4d10" } ``` In order to complete the session opening, the MFA prompt needs to be answered by calling `/Authorize`, using the new RequestId (session reference), contained in this first response. Here is an example of the MFA answer request: ```json Json theme={null} { "RequestId": "006fd2f3-055b-4ef6-a9fc-c1261cd76ec6", "SecurityResponses": { "What shape do people like most?": ["Triangle"] } } ``` When Flinks validates with the financial institution that all submitted credentials are valid and no additional information is required, `/Authorize` will respond with a `200` HTTP status code. ```json Json theme={null} { "Links": [ { "rel": "AccountsDetail", "href": "/GetAccountsDetail", "example": null }, { "rel": "AccountsSummary", "href": "/GetAccountsSummary", "example": null }, { "rel": "Statements", "href": "/GetStatements", "example": null } ], "HttpStatusCode": 200, "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2020-04-15T22:46:03.1690585", "Type": "Personal", "Id": "b0debb48-f9f1-46c6-80a4-08d7dd88d478" }, "Institution": "FlinksCapital", "RequestId": "006fd2f3-055b-4ef6-a9fc-c1261cd76ec6" } ``` Once this step is reached, it means that your session was successfully opened, and the received RequestId can be used to make calls to other data retrieval endpoints. (`/GetAccountDetails`, for example). ### LoginId All successfully completed `/Authorize` step will also return you a `LoginId`. (which in the last example was `b0debb48-f9f1-46c6-80a4-08d7dd88d478`) A `LoginId` is the reference of the saved connected account, which needs to be kept safe. If in a later moment you would like simply to retrieve the saved data on a particular account, its `LoginId` needs to be used on a cached call flow. (In a similar way as Flinks Connect integrations retrieve data). **Keep track of each new `LoginId`, for a later use, or even for a later deletion of data, since Flinks will retain data indefinitely unless `/DeleteCard` is used.**

Disclaimer

Please be mindful that this session addresses a legacy type of integration with Flinks. The following articles are mostly to support customers that are already live with this methodology. Flinks Connect was developed to replace this integration and solve the following challenges: * Increase conversion rate. * Avoid maintenance efforts on your side to account for authentication flow changes by the financial institution. * It includes support for our new OAuth connections which is not the case with the legacy flow.
### Special Authorize Flows Financial institutions can vary in the format of their Multi-Factor Authentication. In this section we have all types of MFA you need to handle in case of a custom integration, including: * Triple MFA * Image selection * SecurID * Reset security questions * Two-step verification security code * Trusted device verification If you're using Flinks Connect, it will do all of this work for you. #### Case 1 (RBC): Triple MFA This special case is often presented after an incorrect answer is provided in a previous attempt. When this process is triggered, RBC present one of the following procedures: 1. Reset Questions/Answers when questions are provided. 2. Reset Questions/Answers when user has to select new questions. #### Case 1: Reset Questions/Answers when the questions are provided. A triple MFA is presented at once: instead of having to give one answer to a single question, the user needs to give an answer to three different questions. It’s important that you return all three answers in the same call. **Prompt example:** ```json Json theme={null} { ... "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges" : [ { Type : "QuestionAndAnswer", Prompt : "What is the name of your mother" }, { Type : "QuestionAndAnswer", Prompt : "What is the name of your father" }, { Type : "QuestionAndAnswer", Prompt : "What is the name of your dog" } ] } ``` **Response example:** ```json Json theme={null} curl 'https://sandbox.flinks.com/v3/{CustomerId}/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityResponses" : { "What is the name of your mother" : [ "Louise" ], "What is the name of your father" : [ "Paul" ], "What is the name of your dog" : [ "Wouf" ] } }' ``` #### Case 2 (RBC): Select New Questions and Answers Now the user has to select three new questions on top of providing three answers. When this case is prompted, we’ll send you three lists of questions; from each list, your user has to choose one question, and then provide an answer. **Example:** `SecurityChallenges` object that will be returned. ```json Json theme={null} { ... "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges" : [ { Type : "QuestionAndAnswer", Prompt : "Personal Verification Question 1", Iterables : [ "What is the name of my mother", "What is the name of my dog", "..." ] }, { Type : "QuestionAndAnswer", Prompt : "Personal Verification Question 2", Iterables: [ "What is the name of my mother", "What is the name of my dog", "..." ] }, { Type : "QuestionAndAnswer", Prompt : "Personal Verification Question 3", Iterables: [ "What is the name of my mother", "What is the name of my dog", "..." ] } ] } ``` #### Case 3 (Laurentienne): Image selection MFA The authentication process with Laurentienne Bank presents the user with an additional security challenge in the form of an image selection from a list of 16 different images. The Authorize flow looks like this: 1. Login credentials (username + password) 2. 1st MFA (security question) 3. 2nd MFA (image selection) **Example:** `SecurityChallenges` object that will be presented as such and comprised of strings in base64 encoding. ```json Json theme={null} "SecurityChallenges": [ { "Type" : "ImageSelection", "Prompt" : "Select an image", "Iterables" : [ "base64ImageString1", "base64ImageString2", ... ] } ] ``` The image strings within the list of Iterables might be have around 4,000 characters of length each. #### Case 4 (National): SecurID MFA Some National Bank accounts have `SecurID` MFA enabled, which need to be answered in a 2 step verification process. The `SecurId` code will always have 6 digits and needs to be properly answered when it's prompted. As it's an extra step in the Authorize process, here's the order of prompts: 1. Login credentials (username + password) 2. 1st MFA (SecurID code) 3. 2nd MFA (regular security question) **Example:** ```json Json theme={null} { "SecurityChallenges": [ { "Type": "QuestionAndAnswer", "Prompt": "Enter your SecurID" } ] } ``` **Accounts with 2 step verification are not able to automatic refreshes.** #### Case 5 (Scotia): Reset Security Questions With Scotia, a user may be prompted to reset their security questions. The user may be presented with a set of multiple choice questions. There are two distinct types: * `MultipleChoice`: Expects only one answer * `MultipleChoiceMultipleAnswers`: Expects one or more answers The procedure is as follows: 1. Login credentials (username and password) 2. First set of Security Challenges (personal multiple choice questions) 3. Second set of Security Challenges (choosing a set of new security questions) **Example:** Step 2 Response ```curl curl theme={null} curl 'https://sandbox.flinks.com/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityResponses" : { "Choose one of the following:" : [ "None of the above" ], "What purchases did you make over the last 10 days?" : [ "Purchase 1: $10.35", "Purchase 3: $143.86" ] } }' ``` **Example:** Step 2 Personal Multiple Choice Questions ```json Json theme={null} { ... "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges": [ { "Type" : "MultipleChoice", "Prompt" : "Choose one of the following:", "Iterables" : [ "Something", "Something else", "...", "None of the above" ] }, { "Type" : "MultipleChoiceMultipleAnswers", "Prompt" : "What purchases did you make over the last 10 days?", "Iterables" : [ "Purchase 1: $10.35", "Purchase 2: $73.42", "Purchase 3: $143.86", "...", "None of the above" ] } ] } ``` **Example:** Step 3 Response ```curl curl theme={null} curl 'https://sandbox.flinks.com/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityResponses" : { "What is the name of your mother" : [ "Louise" ], "What is the name of your father" : [ "Paul" ], "What is the name of your dog" : [ "Wouf" ] } }' ``` **Example:** Step 3 Choosing a set of new Security Questions.

Note:

This is identical to the procedure as described above with **Case 2: Reset Questions/Answers when user has to select new questions.**
```json Json theme={null} { "...""RequestId":"2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges":[ { "Type":"QuestionAndAnswer", "Prompt":"Personal Verification Question 1", "Iterables":[ "What is the name of my mother", "What is the name of my dog", "..." ] }, { "Type":"QuestionAndAnswer", "Prompt":"Personal Verification Question 2", "Iterables":[ "What is the name of my mother", "What is the name of my dog", "..." ] }, { "Type":"QuestionAndAnswer", "Prompt":"Personal Verification Question 3", "Iterables":[ "What is the name of my mother", "What is the name of my dog", "..." ] } ] } ``` #### Case 6 (TD): 2 Step Verification Security Code TD users may be prompted to enter a security code sent to their phone via a text message or phone call. The API will present a `SecurityChallenge` of type `TextOrCall`. The procedure is as follows: 1. After your regular first Authorize call, the API will prompt the 2 Step Verification Security Code in the API response. 2. In the next Authorize call, you have to pass the registered telephone number and the method of receiving the security code. There are two means by which a user can be contacted: Text or Call. After that, the end-user will receive the code from the chosen method and phone number, which will be used for the next step. 3. Enter the security code. Once TD validates the sent security code, you will receive a 200 response from the API. **Example:** Step 1 Regular first Authorize call ```curl curl theme={null} curl 'https://sandbox.flinks.com/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "Institution" : "TD", "Username" : "{username}", "Password" : "{password}", "save" : true }' ``` **Example:** Step 1 API Response ```json Json theme={null} { ... "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges": [ { "Type" : "TextOrCall", "Prompt" : "Choose a phone number", "Iterables" : [ "PhoneNumber #1", "PhoneNumber #2", "PhoneNumber #3", ... ] } ] } ``` **Example:** Step 2 API Response ```json Json theme={null} { ... "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityChallenges" : [ { "Type" : "QuestionAndAnswer", "Prompt" : "Enter the security code" } ] } ``` **Example:** Step 3 Requests ```curl curl theme={null} curl 'https://sandbox.flinks.com/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "RequestId" : "2b000833-0bf4-4705-9ef8-80d4572af4c4", "SecurityResponses" : { "Enter the security code" : [ "123456" ] } }' ``` **Example:** Step 3 API Response ```json Json theme={null} { "Links": [ { "rel": "AccountsDetail", "href": "/GetAccountsDetail", "example": null }, { "rel": "AccountsSummary", "href": "/GetAccountsSummary", "example": null }, { "rel": "Statements", "href": "/GetStatements", "example": null } ], "HttpStatusCode": 200, "Login": { "Username": "{username}", "IsScheduledRefresh": false, "LastRefresh": "2018-05-23T15:10:51.65608", "Id": "f51a811f-6e01-a901-bf33-352abf17bbe1" }, "Institution": "TD", "RequestId": "2b000833-0bf4-4705-9ef8-80d4572af4c4" } ``` #### Case 7: Trusted device verification In this MFA flow, a trusted user’s device receives a notification to confirm the authentication. The API presents a `SecurityChallenge` of type `WaitUntilEUAccept`. The procedure is as follows: 1. After your regular first Authorize call, the API will prompt the 2-Step Verification Notification in the API response. 2. Inform Flinks that the consent was given through the trusted device by answering the MFA via `/Authorize`. Once validated by the financial institution, a 200 response will be given by Flinks API. **Example:** Step 1 API call ```curl curl theme={null} curl 'https://toolbox.flinks.com/v3/{CustomerId}/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "LoginId": "{LoginId}", "MostRecentCached": false, "Save": true }' ``` **Example:** Step 1 API Response ```json Json theme={null} { "SecurityChallenges": [ { "Type": "WaitUntilEUAccept", "Prompt": "Please verify your identity on your trusted device" } ] } ``` **Example:** Step 2a) API call ```curl curl theme={null} curl 'https://toolbox.flinks.com/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize' \ -H 'content-type: application/json' \ -d '{ "RequestId": "{RequestId}", "SecurityResponses": { "Please verify your identity on your trusted device": [ "VERIFIED" ] } }' ``` **Example:** Step 2a) Response ```json Json theme={null} { "Links": [ { "rel": "AccountsDetail", "href": "/GetAccountsDetail", "example": null }, { "rel": "AccountsSummary", "href": "/GetAccountsSummary", "example": null }, { "rel": "Statements", "href": "/GetStatements", "example": null } ], "HttpStatusCode": 200, "Login": { "Username": "{username}", "IsScheduledRefresh": false, "LastRefresh": "2018-05-23T15:10:51.65608", "Id": "f51a811f-6e01-a901-bf33-352abf17bbe1" }, "Institution": "RBC", "RequestId": "{RequestId}" } ``` **Example:** Step 2b) If no push notification is received, send a second API call: ```json Json theme={null} { "RequestId": "{{requestId}}", "SecurityResponses": { "{{prompt}}": ["NOT_RECEIVED"] } } ``` **Example:** Step 2b) Response ```json Json theme={null} { "HttpStatusCode": 401, "FlinksCode": "CHALLENGE_NOT_RECEIVED", "Message": "User did not receive response from the bank" } ``` # Mobile & Native App Integration Source: https://docs.flinks.com/guides/connect/mobile-integration Integrate Flinks Connect into iOS, Android, and React Native apps using WebView. Flinks Connect can be embedded in native mobile applications using a WebView. This guide covers setup for iOS (WKWebView), Android (WebView), and React Native. ## WebView parameter Add `webview=true` to your Flinks Connect iframe URL when loading it inside a native WebView. This changes the event communication method: instead of using `window.postMessage`, Flinks Connect emits events to `window.ReactNativeWebView.postMessage` (React Native) or the native WebView message handler. ```url theme={null} https://[instance]-iframe.private.fin.ag/v2/?webview=true&demo=true&redirectUrl=https://example.com/callback ``` ## iOS (WKWebView) ### Setup ```swift theme={null} import WebKit class FlinksViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler { var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() let config = WKWebViewConfiguration() let preferences = WKPreferences() preferences.javaScriptCanOpenWindowsAutomatically = true config.preferences = preferences // Listen for Flinks Connect events config.userContentController.add(self, name: "flinksEvent") webView = WKWebView(frame: view.bounds, configuration: config) webView.navigationDelegate = self view.addSubview(webView) let url = URL(string: "https://[instance]-iframe.private.fin.ag/v2/?webview=true&demo=true&redirectUrl=https://example.com/callback")! webView.load(URLRequest(url: url)) } func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if message.name == "flinksEvent", let body = message.body as? String { print("Flinks event: \(body)") // Parse the JSON event and handle accordingly } } } ``` You must set `javaScriptCanOpenWindowsAutomatically = true` on iOS. OAuth-based institutions open a popup for authentication, and WebViews block popups by default. ## Android (WebView) ### Setup ```kotlin theme={null} import android.webkit.WebView import android.webkit.WebViewClient import android.webkit.WebChromeClient import android.webkit.WebSettings class FlinksActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val webView = WebView(this) setContentView(webView) val settings: WebSettings = webView.settings settings.javaScriptEnabled = true settings.javaScriptCanOpenWindowsAutomatically = true settings.domStorageEnabled = true webView.webViewClient = WebViewClient() webView.webChromeClient = WebChromeClient() webView.loadUrl("https://[instance]-iframe.private.fin.ag/v2/?webview=true&demo=true&redirectUrl=https://example.com/callback") } } ``` Both `javaScriptEnabled = true` and `javaScriptCanOpenWindowsAutomatically = true` are required on Android. Without these, Flinks Connect will not function correctly. ## React Native ### Using `react-native-webview` ```jsx theme={null} import React, { useRef } from 'react'; import { WebView } from 'react-native-webview'; const FlinksConnect = ({ onSuccess, onError }) => { const webViewRef = useRef(null); const handleMessage = (event) => { try { const data = JSON.parse(event.nativeEvent.data); console.log('Flinks event:', data); switch (data.step) { case 'COMPONENT_LOAD_INSTITUTION': // Widget loaded, institution selector is visible break; case 'REDIRECT': // User has successfully connected, extract loginId if (data.loginId) { onSuccess(data.loginId, data.institution); } break; case 'COMPONENT_LOAD_CREDENTIAL': // User selected an institution break; case 'INSTITUTION_SELECTED': // Institution chosen break; default: break; } } catch (e) { console.error('Failed to parse Flinks event:', e); } }; return ( ); }; export default FlinksConnect; ``` ## Event sequence (happy path) Flinks Connect emits the same ordered events in a WebView as on the web, delivered to your `onMessage` handler. For the full sequence and the `REDIRECT` payload, see [A successful connection journey](./flinks-connect/use-event-listener#a-successful-connection-journey). Listen for the `REDIRECT` event to capture the `loginId` and proceed with your backend flow. ## Deep link configuration If you use a `redirectUrl` parameter, ensure your app is configured to handle the redirect URL as a deep link. This allows the WebView (or OS) to route the user back to your app after a successful connection. For iOS, register a URL scheme or Universal Link. For Android, configure an intent filter in your `AndroidManifest.xml`. When using `webview=true`, Flinks Connect sends events via `postMessage` instead of redirecting the URL. You can listen for these events directly in your WebView's message handler rather than relying on URL-based redirects. ## OAuth popup handling Some financial institutions use OAuth for authentication, which opens a popup window. WebViews block popups by default. **Solutions:** * Set `javaScriptCanOpenWindowsAutomatically = true` (required on all platforms) * Use the `oauthWindowRedirect=true` parameter to replace popups with full-page redirects within the WebView ```url theme={null} https://[instance]-iframe.private.fin.ag/v2/?webview=true&oauthWindowRedirect=true&redirectUrl=https://example.com/callback ``` ## Responsive CSS for iframe embedding If you're embedding Flinks Connect in a hybrid app using an iframe inside a WebView, use responsive CSS to ensure it fills the viewport: ```html theme={null} ``` ## Testing Use `demo=true` in your URL to display the test institution **Flinks Capital**. This allows you to test the full connection flow without using real banking credentials. See [Test Users](/guides/connect/flinks-connect/test-users) for available test credentials. # Nightly Refreshes Source: https://docs.flinks.com/guides/connect/nightly-refresh If you would like automatic account refreshes, read the following sections to enable Nightly Refreshes.

Nightly Refresh is no longer actively supported

Automatic nightly refresh (without end-user presence) is no longer a supported feature for most financial institutions. Due to the prevalence of one-time passwords and push-notification MFA, automatic refresh success rates are extremely low in Canada (except for a small number of OAuth-connected institutions). **What this means for your integration:** * Do not rely on automatic nightly refresh for your use case. * To refresh account data, the end-user must be present and complete a live connection through Flinks Connect. * You can implement a "Refresh" button in your application that triggers a live [/Authorize](/api/authorize/endpoints/authorize) call with `MostRecentCached: false`. The user will need to complete MFA if prompted. * [Reconnect](/guides/connect/resume-and-reconnect) can help reduce friction for end-user reconnections. Existing customers with active nightly refresh configurations will continue to be supported. Contact your Flinks Representative for details on your specific setup.
## Eligibility Criteria A card must comply with certain eligibility criteria before being refreshed. For a card to be refreshed, it must satisfy the following conditions: * The Schedule Refresh parameter must be set to true. You can enable it in two ways: * **Flinks Connect iframe**: Add `scheduleRefresh=true` to your iframe URL parameters * **API**: Call the [/SetScheduledRefresh](/api/connect/endpoints/account-linking/set-scheduled-refresh) endpoint to enable or disable nightly refresh for specific accounts * The card must have had a successful refresh in the last seven days. * (Not applicable for Webhooks integrations) The card must have received a cached call in the past seven days. * The card should not have any errors during Authorization. However, if an error has occurred, the card will still be eligible for refresh if the error is one of the following: * `RETRY_LATER` * `AGGREGATION_ERROR` * `SESSION_EXPIRED` * `DISABLED_INSTITUTION` * `UNAUTHORIZED` * `SESSION_NONEXISTENT` * `BANK MAINTENANCE_RETRY_LATER` Security questions are not always prompted during Nightly Refresh. If MFA answers have been stored using the [/AnswerMFAQuestions](/api/connect/endpoints/account-linking/answer-mfa-questions) endpoint and Enhanced MFA is enabled, Flinks can answer them automatically, minimizing MFA interruptions during nightly refreshes. ## Enabling Nightly Refreshes You can enable automatic account refreshes using Nightly Refresh and Enhanced MFA. ### Nightly Refresh If your use case requires automatic account refresh to keep track of transactional history changes, you can enable `Nightly Refresh` for new accounts. For this, you need to set the scheduleRefresh parameter to true in the iframe URL. ### Enhanced MFA (Deprecated)

Enhanced MFA is no longer supported

Enhanced MFA is no longer an actively supported feature. Most Canadian financial institutions have moved to one-time passwords and push notifications for MFA, which cannot be answered automatically. The `enhancedMFA` and `skipEnhancedMFA` iframe parameters should not be used in new integrations. For refreshing account data, implement a user-initiated reconnection flow instead. See the [Reconnect](/guides/connect/resume-and-reconnect) guide for recommended approaches.
## Useful Endpoints [/GetNightlyRefreshStatus](/api/connect/endpoints/account-linking/get-nightly-refresh-status): This endpoint returns a list with all of the `loginIds` that are set to Nightly Refresh (`"isScheduledRefresh"=true`), yet are no longer refreshing due to errors. The endpoint's JSON response will clarify what error was encountered on the refresh attempt. [/Authorize](/api/authorize/endpoints/authorize): This endpoint will also return the error message from the previous refresh attempt when running the batched cached calls. In cases where the JSON response doesn't return any errors, please make sure you check the date of the latest refresh. An example can be seen in the image below: If the date of your last refresh is too long ago for your use case, perform a manual refresh: call [/Authorize](/api/authorize/endpoints/authorize) with `MostRecentCached: false` and `Save: true`, then call the aggregation endpoints with the returned `requestId`. See [Reconnect](/guides/connect/resume-and-reconnect) for the full refresh and MFA-during-refresh flow. ## Suggested daily routine Complete the following steps in our suggested daily routine for refreshes: ### Step 1: Check which loginIds are no longer eligible Call the `/GetNightlyRefreshStatus` endpoint to identify accounts that are set to refresh but no longer meet the eligibility criteria: ```mermaid theme={null} flowchart LR A["/GetNightlyRefreshStatus"] -->|For each LoginId
present on the list| B["Flinks Connect
User needs to reconnect"] style A fill:#4FC3F7,stroke:#333,stroke-width:2px style B fill:#B0C4DE,stroke:#333,stroke-width:2px ``` ### Step 2: Handle loginIds not on the list If any `loginIds` are not on the list, follow this flowchart to manually refresh them: ```mermaid theme={null} flowchart TB A["/Authorize
MostRecentCached=true
Save=true"] --> B{200?} B -->|Yes| D["GetAccountsDetail"] B -->|No| C{"Error is RETRY_LATER,
AGGREGATION_ERROR, SESSION_EXPIRED,
DISABLED_INSTITUTION, UNAUTHORIZED,
SESSION_NONEXISTENT, or
BANK_MAINTENANCE_RETRY_LATER?"} C -->|Yes| F["/Authorize
MostRecentCached=false
Save=true"] C -->|No| E1["Flinks Connect
User needs to reconnect"] F --> F1{Response?} F1 -->|200| D F1 -->|203 MFA| MFA["Flinks Connect
with requestId + authorizeToken
User answers MFA"] MFA --> D D --> G{200?} D --> H{"202
OPERATION PENDING?"} G -->|Yes| I["Attributes endpoints"] G -->|No| E2["Flinks Connect
User needs to reconnect"] H -->|Yes| J["GetAccountsDetailAsync"] J --> K{"202
OPERATION PENDING?"} K -->|"Yes, wait 10 seconds"| J K -->|No| I2["Attributes endpoints"] style A fill:#4FC3F7,stroke:#333 style D fill:#4FC3F7,stroke:#333 style F fill:#4FC3F7,stroke:#333 style J fill:#40E0D0,stroke:#333 style I fill:#40E0D0,stroke:#333 style I2 fill:#40E0D0,stroke:#333 style E1 fill:#B0C4DE,stroke:#333 style E2 fill:#B0C4DE,stroke:#333 style MFA fill:#B0C4DE,stroke:#333 ``` ## Nightly Refresh routine The Nightly Refresh job has a daily routine. The job is scheduled to run from 4 a.m. to 8 a.m. (UTC). It will only impact all cards that meet the Eligibility Criteria. ## Coverage For more information about which financial institutions we support Nightly Refreshes for, contact your Flinks Representative. # OAuth Integration Source: https://docs.flinks.com/guides/connect/oauth-integration Set up Flinks Connect with OAuth for web and mobile platforms, including universal links and WebView configuration. Many US financial institutions use OAuth for authentication. When a customer selects an OAuth-supported institution in Flinks Connect, they are redirected to their bank's website to authorize the connection, then redirected back. ## Web integration ### iframe setup Embed Flinks Connect as an iframe with the required `redirectUrl` parameter: ```html theme={null} ``` ### Handling events Use the Event Listener to track the OAuth flow: ```html theme={null} ``` Ensure your website allows pop-ups from the Flinks domain, as OAuth connections open the bank's authorization page in a new window. ## Mobile integration For mobile apps, OAuth requires special handling because WebViews may not fully support the redirect flow. ### Recommended approach: system browser Use the device's system browser (Safari on iOS, Chrome on Android) instead of a WebView for the best OAuth experience: 1. Open Flinks Connect in the system browser using your iframe URL. 2. Add `oauthWindowRedirect=true` to enable full-page redirects instead of pop-ups. 3. Set up an HTTPS universal link (iOS) or App Link (Android) so the OAuth callback returns the user to your app. Flinks only supports `https` redirect URIs. Custom URI schemes such as `myapp://` are not supported. Use an HTTPS URL that your app claims through universal links or App Links. ``` https://{instance}-iframe.private.fin.ag/?oauthWindowRedirect=true&redirectUrl=https://yourapp.com/callback&... ``` ### Returning to your app After the OAuth flow completes, Flinks redirects to your `redirectUrl` with the `loginId`: ``` https://yourapp.com/callback?loginId={loginId}&institution={institution} ``` Configure your app's universal link (iOS) or App Link (Android) to open on this HTTPS URL and extract the `loginId`. ### WebView configuration If you must use a WebView, configure it properly: * Use `SFSafariViewController` or `ASWebAuthenticationSession` for the OAuth flow * Standard `WKWebView` may block redirects to external domains * Ensure your app's domain is properly configured for universal links * Enable JavaScript in your WebView: `webView.getSettings().setJavaScriptEnabled(true)` * Enable DOM storage: `webView.getSettings().setDomStorageEnabled(true)` * Handle external URLs by opening them in the system browser * Set `webview=true` in the iframe URL parameters * Use `oauthWindowRedirect=true` for OAuth institutions * Handle the redirect URL in your native code to capture the `loginId` ## Testing Test your OAuth integration across multiple environments: | Platform | What to verify | | :-------------- | :---------------------------------------------------- | | Desktop browser | Pop-up opens and redirects work correctly | | iOS Safari | OAuth redirect returns to your app via universal link | | Android Chrome | OAuth redirect returns to your app via App Link | | WebView | OAuth flow completes without blocked pop-ups | ### Simulate an OAuth flow in the Toolbox You can test the full front-end OAuth experience in the [Toolbox](/guides/getting-started/testing-environments) by adding `demoOutbound=true` to the iframe URL. This routes the Flinks Capital demo institution through the OAuth flow, so you can walk the OAuth screens end to end with sandbox data. Call `/GenerateAuthorizeToken` with your `customerId`, instance, and `flinks-auth-key` to obtain a token for the iframe. Use the [Toolbox credentials](/guides/getting-started/testing-environments#toolbox-credentials). Load Flinks Connect with `demoOutbound=true` and the token you generated: ``` https://{instance}-iframe.private.fin.ag/v2/?demoOutbound=true&authorizeToken={token} ``` The demo reproduces the full front-end OAuth sequence: 1. Consent page 2. Financial institution selection 3. FI redirecting page 4. FI online banking: username / password 5. FI online banking: consent screen 6. FI online banking: account selection 7. Success page (returns the `loginId`) `demoOutbound=true` runs the Flinks Capital demo institution through the OAuth flow, which is how you exercise the OAuth screens in the sandbox. When you're ready for end-to-end validation against a real OAuth institution, use a client (production) instance. # Reconnect Source: https://docs.flinks.com/guides/connect/resume-and-reconnect Bring an end user back into Flinks Connect to answer MFA, whether their session was just interrupted or an existing connection needs a live refresh. Reconnect lets an end user re-enter Flinks Connect to answer MFA and keep their bank connection alive, whether their original session was just interrupted, or it completed days ago and now needs a live refresh. ## When to use it Two scenarios, one feature: * **Interrupted session**: the end user closed the tab or navigated away mid-MFA. Bring them back to where they left off. * **Refresh an existing connection**: a previously authorized account needs fresh data, and the financial institution requires MFA again (e.g., Nightly Refresh failed, on-demand transaction update, MFA answers changed at the bank). In both cases the outcome is the same: the end user answers MFA in Flinks Connect, and the connection moves forward. ## How it works Pick the entry point that matches your starting state. ### Interrupted session: you have a live `requestId` Reload Flinks Connect with the existing `requestId` and a fresh `authorizeToken`. The end user lands directly on the MFA prompt, no restart. ``` https://{instance}-iframe.private.fin.ag/?requestId={requestId}&authorizeToken={token} ``` A fresh `authorizeToken` is **required** on every relaunch (authorize tokens are single-use). You can also append these optional parameters: | Parameter | Purpose | | :---------- | :------------------------------------------------------------- | | `demo=true` | Resume against the Flinks Capital demo institution for testing | | `sync=true` | Retrieve data by polling the API instead of via webhooks | The response code on the initiating session API call tells you how to proceed: | Status | Meaning | Action | | :----- | :----------------------------- | :---------------------------------------------------------------------- | | `200` | Ready | Continue and retrieve data | | `203` | MFA pending, session resumable | Relaunch the iframe with the `requestId` so the end user can answer MFA | | Other | Not resumable | Start a new Flinks Connect session | | Token | Validity | | :-------------- | :---------------------- | | `requestId` | 8 minutes of inactivity | | Authorize token | 15 minutes | If the `requestId` has expired, the end user will need to start a new session. Store the `requestId` as soon as you receive it: you only have an 8-minute window to relaunch. Only trigger a reconnect when the end user is present to answer the MFA challenge. ### Refresh: you have a stored `loginId` Call [/Authorize](/api/authorize/endpoints/authorize) with: * `LoginId`: the customer's existing `loginId` * `MostRecentCached: false`: force a live connection to the financial institution * `Save: true`: persist the refreshed data * `directRefresh: true` If the financial institution requires MFA, the API returns a `203` with security challenges. Open Flinks Connect with the same `requestId` and a fresh `authorizeToken` so the end user can answer the MFA: ``` https://{instance}-iframe.private.fin.ag/?requestId={requestId}&authorizeToken={token} ``` After the end user answers MFA, Flinks Connect fires a `REDIRECT` event. Call `/Authorize` again with `MostRecentCached: true` to get a new `requestId`, then call [/GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail) to retrieve the fresh data. ## Preserve previously selected accounts If the original session used the [Account Selector](/guides/connect/flinks-connect/widget#account-selection), pass the previously selected account IDs into the Reconnect iframe with [`resumeSelectedAccounts`](/guides/connect/flinks-connect/widget#preserve-account-selection-across-reconnect-sessions). Flinks Connect skips the selector, applies the filter on the backend, and surfaces the IDs in the `REDIRECT` event and redirect URL, so [/GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail) returns only the originally selected accounts. ``` https://{instance}-iframe.private.fin.ag/?requestId={requestId}&resumeSelectedAccounts={id1},{id2} ``` ## Common use cases * Refreshing data when Nightly Refresh has failed for an account * Collecting updated transaction history on demand * Re-authorizing when an account's MFA answers have changed at the bank # Retrieve Account Data Source: https://docs.flinks.com/guides/connect/retrieve-account-data Call /GetAccountsDetail to retrieve account data, then handle the 202 polling flow or use webhooks. After a customer connects their bank account through Flinks Connect, you retrieve their financial data by calling the `/GetAccountsDetail` endpoint. This page explains the full data retrieval flow. ## Prerequisites Before calling `/GetAccountsDetail`, you need a valid `RequestId`. To obtain one: 1. Retrieve the `loginId` from the Flinks Connect [event listener](./flinks-connect/use-event-listener) or [redirect URL](./next-steps#save-your-loginids). 2. Call [`/Authorize`](../../api/authorize/endpoints/authorize) with the `loginId` to get a `RequestId`. Store the `loginId` on your server. The `loginId` does not expire and is required for future data retrieval. The `RequestId` is session-scoped: it expires on timeout and is consumed once `/GetAccountsDetail` completes, so a further live retrieval needs a new `/Authorize` call. In cached mode, a cached `RequestId` is not consumed by cached `/GetAccountsDetail`. ## Call /GetAccountsDetail Send a `POST` request to [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) with the `RequestId` in the body. The endpoint returns account data including personal information, account details, and transaction history. See the [API reference](../../api/connect/endpoints/account-linking/get-accounts-detail#accounts-detail) for the full list of returned fields. ## Handle the response `/GetAccountsDetail` returns one of two responses: * **`200`**: Data is ready. The response contains the full account payload. * **`202`**: Data is still processing. You must poll `/GetAccountsDetailAsync` to retrieve the data when it's ready. A `202` response is expected on the initial call. Most requests finish processing within a few seconds. ## Poll /GetAccountsDetailAsync on 202 When you receive a `202` from `/GetAccountsDetail`: 1. Call [`/GetAccountsDetailAsync`](../../api/connect/endpoints/account-linking/get-accounts-detail-async) with the same `RequestId` as a path parameter. This is a `GET` request. 2. If the response is `202`, the data is still processing. Wait 10 seconds, then call `/GetAccountsDetailAsync` again. 3. Repeat until you receive a `200` response. The `200` response contains the same payload as a `200` from `/GetAccountsDetail`. 4. Set a maximum timeout of 30 minutes to avoid infinite polling loops. `/GetAccountsDetailAsync` is not a separate data endpoint. It is the polling mechanism for `/GetAccountsDetail`. You only call it after receiving a `202` from `/GetAccountsDetail`. ## Refresh account data To fetch fresh data for an already-connected user, call `/Authorize` with `MostRecentCached: false` and `Save: true`. This triggers a live re-authorization with the financial institution instead of returning cached data. If the bank requires MFA, `/Authorize` returns a `203` and the user must answer a challenge before fresh data is available. For the full refresh flow, including handling `203` MFA (relaunching Flinks Connect, then a cached authorize to get a fresh `requestId`), see [Reconnect](./resume-and-reconnect). ## Alternative: use webhooks Instead of polling `/GetAccountsDetailAsync`, you can configure a [webhook](../../api/connect/webhooks) to receive the data automatically when processing completes. With webhooks, Flinks sends a `POST` callback to your endpoint containing the same payload as a `/GetAccountsDetail` `200` response. This eliminates the need for polling logic. Webhook setup requires a ticket via [Flinks Support Portal](https://help.flinks.com/support/home). Webhooks cannot be tested in sandbox environments. For more details, see the [Webhooks documentation](../../api/connect/webhooks). # Set Up Authorization Source: https://docs.flinks.com/guides/connect/setup-authorization Generate and pass an authorize token to securely access Flinks account data. When completing the authorization process for **both Flinks Connect and direct API connections**, you must pass a valid authorize token to access account data. This adds an extra layer of security by ensuring that only the intended person is accessing the account. For a summary of all credentials, headers, and which value to pass on each endpoint, see the [Authentication Reference](./authentication-reference). Complete the steps below to pass us an authorize token each time you authenticate: ### a) Receive a secret key from Flinks Flinks provides a secret key during the integration process. This is a unique key that identifies you within the system and grants you access to our APIs. Use your secret key to generate an authorize token. This allows us to confirm your identity and ensure that the correct person is accessing the data. ### b) Generate an authorize token Call the [/GenerateAuthorizeToken](../../api/authorize/endpoints/generate-authorize-token) endpoint and pass your secret key. This token can only be used **once** and is active for **15 minutes**. This token expires if it is not used within 15 minutes and you must generate a new one. ### c) Send us an authorize token to successfully authenticate Those using Flinks Connect will pass the authorize token using a [customization parameter](./flinks-connect/widget#pass-an-authorize-token). Add the `authorizeToken` customization parameter to your Flinks Connect iframe URL, then pass your authorize token using the format `authorizeToken=123-456-789`. Replace `123-456-789` with your valid token. **Flinks Connect Example:** ```url URL theme={null} https://yourinstance-iframe.private.fin.ag/?redirectUrl=flinks.com&authorizeToken=d65f1adb-8ebc-48dc-be8b-20c773ba1565 ``` **For Direct API integrations**, pass the authorize token via the `flinks-auth-key` header when calling `/Authorize`: ```bash Direct API Example theme={null} curl --request POST \ --url https://yourinstance-api.private.fin.ag/v3/{customerId}/BankingServices/Authorize \ --header 'Content-Type: application/json' \ --header 'flinks-auth-key: d65f1adb-8ebc-48dc-be8b-20c773ba1565' \ --data '{ "LoginId": "your-login-id", "MostRecentCached": true }' ``` **Important Distinctions:** * **Secret Key**: Use in `/GenerateAuthorizeToken` header to create tokens * **Authorize Token**: Use in `/Authorize` header or Flinks Connect URL parameter * **Never confuse these two** - they serve different purposes in the auth flow ## Complete Authentication Flow ### Step-by-Step Process 1. **Obtain Secret Key**: Get your secret key from Flinks during integration setup 2. **Generate Authorize Token**: ```bash theme={null} curl --request POST \ --url https://toolbox-api.private.fin.ag/v3/{customerId}/BankingServices/GenerateAuthorizeToken \ --header 'Content-Type: application/json' \ --header 'flinks-auth-key: YOUR_SECRET_KEY' ``` 3. **Use Token Immediately**: * **Flinks Connect**: Add `authorizeToken={token}` to iframe URL * **Direct API**: Pass token as `flinks-auth-key` header to `/Authorize` 4. **Handle Response**: Process successful authentication or error responses ## Troubleshooting If you encounter issues while setting up authorization, see our comprehensive [Authentication Troubleshooting](../../api/authorize/troubleshooting) guide for detailed solutions to common problems including header configuration, URL formatting, token management, and environment setup. ## Connect to optional API endpoints to enhance your integration

Custom integrations only

This page explains how to set up custom integrations that use a direct API connection. If you are using Flinks Connect, see Set Up Flinks Connect.
Complete the following steps to connect with us using a custom API integration that uses OAuth 2.0. 1. Ask your Flinks Representative to whitelist the URLs that your endpoints will be calling, including the redirect URL is step 2A. 2. Call the [/OAuth/Authorize](../../api/authorize/custom/oauth-authorize) endpoint and perform the following tasks: * Redirect the end user to their bank’s login screen using the `institution` parameter. Here, they'll enter their login credentials and complete multi-factor authentication (MFA) if required. * Provide a URL to redirect the end user back to your website or app using the `redirect_uri` field. If the login is successful, you receive a redirect response containing a `loginId`: `https://{redirect}?loginId={loginId}&state={state}`. If the login is unsuccessful, you receive a redirect response containing an error message: `https://{redirect}?state={state}&error={error}&error_description={error_description}`. For more information on how to make this call, see our [API documentation](../../api/authorize/custom). 3. Call the [/Authorize](../../api/authorize/endpoints/authorize) endpoint and apply the following settings to initiate the authorization flow: * Pass the `loginId` that you received in step 2. * Make the call in live mode by setting the `MostRecentCached` parameter to `FALSE`.\ For more information on how to make this call, see our [API documentation](../../api/authorize/endpoints). * Set the `save` parameter to `TRUE` to maintain communication with the database (for nightly refreshes, receiving insights, and more).\ For more information on how to make this call, see our [API documentation](../../api/authorize/endpoints/authorize). If you receive a `200` response, the end-user is successfully authenticated, and you can now use the Flinks API to retrieve data. # Connect Standard Integration (Widget + API) Source: https://docs.flinks.com/guides/connect/standard-integration Walk through the standard Flinks integration end to end: launch Flinks Connect on the front end, then authorize and retrieve account data through API requests on the back end. The **standard integration** is the most common way to connect with Flinks. It pairs the [Flinks Connect](./flinks-connect/flinks-connect) iframe on the front end with **API requests** on the back end. This page walks through the full happy-path flow, from launching the iframe to retrieving account data. ## Front end vs. back end Every Flinks integration has two independent halves. You choose one option for each. * **Front end:** what the end user interacts with to connect their account, either the [Flinks Connect](./flinks-connect/flinks-connect) iframe or [Flinks Express](./flinks-express). See [Choose a Front-End Solution](./choose-a-frontend-solution). * **Back end:** how your system receives the connected data, either API requests or Webhooks. See [Choose a Back-End Solution](./choose-a-backend-solution). The [Client Dashboard](./getting-started) is a self-serve UI that calls the back end on your behalf, not a separate back-end option. This page describes the standard integration: **Flinks Connect** on the front end plus **API requests** on the back end. If you want data pushed to you automatically instead of polling, see [Choosing your back end](#choosing-your-back-end) below. ## Prerequisites Before you begin, make sure you have the following credentials and values. You can find these in your [Flinks Dashboard](./getting-started) or from your Flinks representative. | Value | Purpose | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | | **Customer ID** (`customerId`) | Identifies your account. Used in every API URL path. | | **Instance name** | Your regionally-scoped instance (for example, sandbox vs. production). Determines your base URLs. See [Instances](../getting-started/instances). | | **Secret key** | The unique key Flinks provides during integration. Passed in the `flinks-auth-key` header of `/GenerateAuthorizeToken` to create authorize tokens. | | **Authorize token** | A single-use token generated from your secret key. Passed to Flinks Connect (URL parameter) or to `/Authorize` (`flinks-auth-key` header). | | **iframe base URL** | The Flinks Connect endpoint you launch, in the form `https://yourinstance-iframe.private.fin.ag/`. | The **secret key** and the **authorize token** are not the same. Use the secret key only to generate authorize tokens; use the authorize token to authenticate Flinks Connect or `/Authorize`. See [Set Up Authorization](./setup-authorization). ## End-to-end flow The diagram below shows the standard integration happy path. ```mermaid theme={null} sequenceDiagram participant App as Your App / Back end participant User as End User participant Connect as Connect Widget participant API as Connect API App->>API: /GenerateAuthorizeToken (token #1) API-->>App: authorize token App->>Connect: Launch iframe with authorize token User->>Connect: Select FI, enter credentials, complete MFA Connect-->>App: loginId (and optional accountId) App->>API: /GenerateAuthorizeToken (fresh token #2) API-->>App: authorize token App->>API: /Authorize (loginId, MostRecentCached: true) API-->>App: 200 + requestId App->>API: /GetAccountsDetail (requestId) alt 202: operation pending API-->>App: 202 (processing) loop Poll every ~10 seconds App->>API: /GetAccountsDetailAsync (requestId) API-->>App: 202 (still processing) end API-->>App: 200 (account data) else 200: data ready API-->>App: account data end ``` ## Step-by-step Call [`/GenerateAuthorizeToken`](../../api/authorize/endpoints/generate-authorize-token) with your **secret key** in the `flinks-auth-key` header. * **Input:** secret key (header) * **Output:** an authorize token that is single-use and active for 15 minutes. Pass this token to Flinks Connect using the `authorizeToken` URL parameter: ```url URL theme={null} https://yourinstance-iframe.private.fin.ag/?redirectUrl=flinks.com&authorizeToken=d65f1adb-8ebc-48dc-be8b-20c773ba1565 ``` The end user selects their financial institution, enters their credentials, and completes multi-factor authentication (MFA) if their bank requires it. Flinks Connect handles all bank processes, edge cases, and errors on your behalf. When the connection succeeds, capture the `loginId` (and optionally an `accountId`) from the Flinks Connect [event listener](./flinks-connect/use-event-listener) or the [redirect URL](./next-steps#save-your-loginids). * **Output:** `loginId`, a permanent token representing the saved connection. Store it securely on your servers; never expose it publicly. The `loginId` does not expire and is required for all future data retrieval. See [Key Concepts](../getting-started/key-concepts#loginid). The token you generated in step 1 was consumed when you launched Flinks Connect. Authorize tokens are **single-use**, so call [`/GenerateAuthorizeToken`](../../api/authorize/endpoints/generate-authorize-token) again to create a **new** token before calling `/Authorize`. * **Input:** secret key (header) * **Output:** a fresh authorize token. Generate a fresh authorize token continuously across the session, any time you are about to make a call that requires one. Reusing a consumed token will fail authentication. Call [`/Authorize`](../../api/authorize/endpoints/authorize) with the `loginId`, passing the fresh authorize token in the `flinks-auth-key` header. Use cached mode (`MostRecentCached: true`) to open a session against the data that was just collected. ```bash Authorize theme={null} curl --request POST \ --url https://yourinstance-api.private.fin.ag/v3/{customerId}/BankingServices/Authorize \ --header 'Content-Type: application/json' \ --header 'flinks-auth-key: {authorize_token}' \ --data '{ "LoginId": "your-login-id", "MostRecentCached": true }' ``` In cached mode the response is `200`, because the end user already completed any required authentication in the iframe. * **`200`:** Authenticated. Use the returned `RequestId` to retrieve data (next step). * **Output:** a `RequestId`, a session token used to call the data endpoints. It cannot be reused. Send a `POST` request to [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) with the `RequestId` in the body. (Use [`/GetAccountsSummary`](../../api/connect/endpoints/account-linking/get-accounts-detail) if you only need summary-level data.) Handle the response by status: * **`200`:** Data is ready. The response contains the full account payload. * **`202`:** The operation is still processing. Poll for the result (next step). A `202` is expected on the initial call. When `/GetAccountsDetail` returns `202`: 1. Call [`/GetAccountsDetailAsync`](../../api/connect/endpoints/account-linking/get-accounts-detail-async) with the same `RequestId` as a path parameter (this is a `GET` request). 2. If the response is `202`, the data is still processing. **Wait \~10 seconds**, then poll again. 3. Repeat until you receive a `200`, which contains the same payload as a `200` from `/GetAccountsDetail`. 4. Set a maximum timeout of 30 minutes to avoid an infinite polling loop. `/GetAccountsDetailAsync` is not a separate data endpoint. It is the polling mechanism for `/GetAccountsDetail`. See [Retrieve Account Data](./retrieve-account-data#poll-getaccountsdetailasync-on-202). If your use case needs enriched insights, call the Attributes / Enrich endpoint on demand with the `RequestId`. Attributes are fetched **on demand** by making an API request. They are not returned automatically with account data and are not delivered by webhook. ## Choosing your back end This page uses **API requests with polling** on the back end. If you would rather have data pushed to you automatically when processing completes, without writing polling logic, set up [Webhooks](../webhooks/introduction) instead. For a side-by-side comparison of API requests vs. Webhooks, see [Choose a Back-End Solution](./choose-a-backend-solution). ## Next steps Generate and pass authorize tokens correctly. Full detail on the data retrieval and polling flow. Understand how Flinks reports and handles errors. Re-establish a connection for a returning user. Receive data automatically instead of polling. # Supported Financial Institutions Source: https://docs.flinks.com/guides/connect/supported-institutions Search and browse the financial institutions supported by Flinks in Canada and the United States. Flinks can connect to a number of Financial Institutions in both Canada and the United States. To check the real-time status of any institution, visit the [Flinks Status Page](https://status.flinks.com). Use our live institution search below to check if a specific financial institution is supported. Alternatively, you can query the [/Institutions endpoint](/api/connect/endpoints/account-linking/institutions) to retrieve the full list programmatically. ## Major Financial Institutions: Canada * [ATB](https://status.flinks.com/components/5a737ef450c68b19b1d14551) * [BMO](https://status.flinks.com/components/5a733b9e4e80f1240aefd341) * [CIBC](https://status.flinks.com/components/5a737e9687d84478be2df4a3) * [Coast Capital](https://status.flinks.com/components/5a737f424e80f1240aefd3d9) * [Desjardins](https://status.flinks.com/components/5a737e6687d84478be2df48d) * [EQBank](https://status.flinks.com/components/5bfc48ca87d8444ea76131b2) * [Laurentienne](https://status.flinks.com/components/5a737f2a4e80f1240aefd3cf) * [Meridian](https://status.flinks.com/components/5a737f1550c68b19b1d14565) * [National](https://status.flinks.com/components/5a737ec04e80f1240aefd3c5) * [RBC](https://status.flinks.com/components/5a737e7f87d84478be2df497) / [*HSBC*](https://status.flinks.com/components/5a737f8250c68b19b1d1456f) * [Scotia](https://status.flinks.com/components/5a737eac87d84478be2df4ad) * [Simplii](https://status.flinks.com/components/5a737f9887d84478be2df4cc) * [Tangerine](https://status.flinks.com/components/5a737ee250c68b19b1d14547) * [TD](https://status.flinks.com/components/5a71e97087d8446bde803f67) ## Major Financial Institutions: USA * [Ally Bank](https://status.flinks.com/components/6000accda87724300bf202e1) * [Bank of America](https://status.flinks.com/components/6000abb7a87724300740d9ea) * [Bank of the West](https://status.flinks.com/components/6000ac5aa87724300740da02) * [BBVA](https://status.flinks.com/components/6000ac1ba877243008d0848c) * [Capital One](https://status.flinks.com/components/5ffc6745a877243009c66b4f) * [Chase Bank](https://status.flinks.com/components/6000abaca877243009c6723b) * [Citibank Online](https://status.flinks.com/components/6000ac66a877243008d084b4) * [Citizen's Bank](https://status.flinks.com/components/6000ac92a87724300bf202cf) * [Fifth Third Bank](https://status.flinks.com/components/6000ac44a877243008d08499) * [Key Bank](https://status.flinks.com/components/6000ac82a87724300bf202c6) * [Navy Federal Credit Union](https://status.flinks.com/components/6000abc5a87724300bf202a3) * [PNC Bank](https://status.flinks.com/components/6000abd9a877243008d08483) * [SunTrust](https://status.flinks.com/components/6000ac4fa877243008d084a6) * [TD Bank USA](https://status.flinks.com/components/6000ac37a87724300bf202bd) * [US Bank](https://status.flinks.com/components/6000abf4a87724300bf202b0) * [USAA](https://status.flinks.com/components/618020764a0ebd5175b33f4c) * [Wells Fargo Bank Online](https://status.flinks.com/components/6000ab9aa87724300740d9e1) # Testing Flinks Express Source: https://docs.flinks.com/guides/connect/testing-flinks-express Test your Flinks Express hosted solution using demo mode and test credentials. Flinks Express is a hosted solution that Flinks manages on your behalf. Before going live, you can test the full flow using demo mode. ## Enabling demo mode Add `demo=true` to your Flinks Express URL to enable demo mode: ``` https://{your-express-url}/?demo=true ``` In demo mode, Flinks Express connects to the **Flinks Capital** test institution instead of real financial institutions, allowing you to test the entire flow without live bank connections. ## Test credentials Use these credentials to log in to Flinks Capital in demo mode: | Field | Value | | :------- | :--------- | | Username | `Greatday` | | Password | `Everyday` | The Flinks Capital test institution simulates a full banking connection, including MFA prompts and account selection. ## Verifying your integration After completing a test connection, verify the results using one of these methods: ### Via Dashboard 1. Log in to the [Flinks Dashboard](/guides/dashboard/getting-started). 2. Navigate to the [Request Feed](/guides/dashboard/request-feed). 3. Locate the test request and verify the status is **Completed**. ### Via API 1. Retrieve the `loginId` from the test connection. 2. Call [/Authorize](/api/authorize/endpoints/authorize) with the `loginId` to get a `requestId`. 3. Call [/GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail) with the `requestId` to verify the returned data. ### Via webhooks If you have [webhooks](/guides/webhooks/introduction) configured, verify that the webhook payload was received at your endpoint after the test connection completes. Demo mode uses test data only. Remove `demo=true` from the URL before sharing your Flinks Express link with real customers. # UX Best Practices Source: https://docs.flinks.com/guides/connect/ux-best-practices Design a connectivity experience that builds trust and maximizes conversion, based on patterns from Flinks' highest-converting clients. Financial data connectivity is still unfamiliar to many end users. When you ask customers to connect their financial accounts, they need reassurance that it's safe and clear guidance through each step. A well-designed flow removes doubt, reduces friction, and turns connecting into a natural part of your onboarding rather than an obstacle. The recommendations on this page come from Flinks' highest-converting clients. Follow them to build a connectivity experience that earns trust and lifts your conversion rate. This is the full version of the short "UX best practices" tips in the [Flinks Connect Overview](./flinks-connect/flinks-connect). The key recommendation: prompt users to connect in the **final** steps of onboarding, once they are already engaged, rather than at the beginning. ## Audit your current flow Before you change anything, critique your existing experience. Walk through your flow as if you were a first-time user and answer the following questions honestly. At what stage are users prompted to connect their accounts: the beginning, middle, or end of your flow? How is connectivity introduced, and how natural does the flow feel from start to finish? What language and illustration do you use? Are your brand, tone, and voice consistent throughout the experience? How much context do users receive before they connect? Are there any signals that users are uncomfortable or hesitant? What happens if a user declines to connect? What is the next step after a user successfully connects? ## Build a natural flow The best flows make connecting feel like the obvious next step rather than a demand. Use the following techniques to reduce hesitation and abandonment. Prompt users to connect in the **final** steps of your onboarding or application, not at the beginning. By that point, users are more engaged and invested. They've already progressed and shared personal information, so they're far less likely to abandon. Connecting feels like the natural next step to complete what they started. Give users a clear reason to connect. Two approaches work well: frame connecting as the logical final step to get what they came for, or state specific, concrete benefits: instant app access, same-day money transfer, or faster loan approval. Present connectivity as the default (opt-out) option rather than opt-in. Defaults signal credibility and offer the path of least resistance, which measurably increases connection rates. When a user tries to opt out, treat it as a moment to re-engage rather than a dead end. Remind them of the value props before they leave. For example, *"Are you sure? Connecting means faster onboarding and no manual document uploads."* ### Provide a manual fallback Offer a manual alternative, such as document upload, for users who opt out of connecting. In some cases (for example, personal finance management apps) connecting is essential, and the service is simply unavailable without it. Within any secondary or manual flow, always let users revert to the connect (default) option at every step. Someone who chose the manual path may reconsider once they see how much longer it takes. ## Build trust at every step Trust is what converts a hesitant user into a connected one. Reinforce it consistently across your experience. ### Keep your brand consistent Keep themes, colours, imagery, tone, and voice consistent from your site, through Flinks Connect, and back to your app. A seamless visual handoff reassures users that they haven't left a trusted environment. Flinks Connect supports this with several [widget parameters](./flinks-connect/widget): | Parameter | Purpose | | :---------------- | :----------------------------------------------------------------------------------------------------------------- | | `customerName` | Displays your company name on the Consent, Login, and Success screens so users know who they're sharing data with. | | `theme` | Matches the widget's appearance to your brand (for example, light or dark). | | `consentEnable` | Shows a clear data-sharing consent step before users enter credentials. | | `headerImgEnable` | Set to `false` to remove only the Flinks logo while keeping the header. | | `headerEnable` | Set to `false` to remove the entire header (title, subtitle, and logo) for a cleaner, embedded feel. | | `termsUrl` | Links to your terms and conditions. | ### Use Flinks' pre-built UI Flinks Connect is optimized for trust and conversion. It handles the edge cases and friction points that commonly cause drop-off, including multi-factor authentication (MFA/2FA), and includes a built-in data-sharing consent step. Building on the pre-built UI means you inherit these optimizations rather than rebuilding them yourself. ### Give users opportunities to opt back in Unless connecting is critical to your service, give users repeated opportunities to return to the default (connect) option. A single decline shouldn't lock them out of the faster path. ### Write customer-centric copy * Lead with what's in it for the user. * State the benefits quickly, in plain, jargon-free language. * Keep the number of steps to a minimum. ### Be transparent on your website Publish clear information about connectivity, security, and privacy. Pre-answer the who, what, how, and why *before* users have to ask. Surprise is the enemy of trust. ### Don't double-collect data Don't ask users to manually re-enter information that Flinks already collects for you. Redundant data entry frustrates users and signals a poorly integrated experience. ## Equip your support agents Your reps and brokers are often the last line of reassurance. Make sure they can confidently explain that no one has direct access to a user's account, and that data is tokenized and scrambled. Give your agents this **Context Checklist** of the questions users most often ask. Every agent should be able to answer all nine: 1. What happens after I connect my accounts? 2. Is data connectivity the last step before I get what I want? 3. What is data connectivity? 4. What's in it for me? 5. Why do I need to connect my financial account? 6. Who is Flinks? 7. How is my information going to be used? 8. Is my financial account information safe and secure? 9. How is this better than the old way? ## Trust checklist The following five practices come directly from Flinks' highest-converting clients. Use them as a final review before you ship. * [ ] **State the benefits.** Use your brand messaging to communicate the benefits of connecting. * [ ] **Minimize steps.** Reduce your onboarding or application steps to the bare minimum. * [ ] **Show progress.** Indicate progress and allow users to pause, save, and return later. * [ ] **Simplify messaging.** Keep terms and conditions short, with "read more" links for detail. * [ ] **Use trust indicators.** Show user reviews, high-profile testimonials, media presence, and relevant standards or certifications, and use reassuring language such as *"protected by bank-level security."* ## Next steps Compare Flinks Connect, Express, and Custom integrations to pick the right front end. Customize Flinks Connect to match your brand and control the consent experience. Set up a manual document-upload fallback for users who opt out of connecting. Let users pick up where they left off and re-establish connections that have lapsed. # Connect Customer Investment Accounts Source: https://docs.flinks.com/guides/connect/wealth/connect-customers Allow your customers to safely access their investments within your app or website by connecting their investment accounts through Flinks. The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. Use this solution if you have a financial services product and your customers may hold their investments across a number of different assets, classes, and financial institutions. Flinks can connect your customers' investments, which allows them to safely access their data so that they can use your services. You can also allow your customers to [connect their bank accounts](../connect-bank-accounts#connect-customer-bank-accounts) through Flinks. ## Coverage Flinks currently connects to 70 unique investment or wealth platforms spread across 45 different financial institutions. This includes full-service brokerages, discount/online brokerages, robo-advisors, mutual fund companies, employer portals, and certain specialty investment companies. In many cases, there is a many-to-one relationship between the platforms and the various FIs, where different logins or online portals may be operated by the same financial partner. For example, BMO has three distinct investment offerings which all have different logins and online portals, and are thus treated separately: * BMO AdvanceDirect (Robo-advisory program) * BMO InvestorLine (Discount brokerage) * BMO Nesbitt Burns (Full-service brokerages) ## Set Up Wealth Complete the following steps to set up Investments enrichment. 1. Set up your environments. 2. Set up your API connection. 3. Set up Flinks Connect if you have not already done so. 4. Ask your Flinks Representative to enable `Investments` in your Flinks Connect Integration. 5. Set up your website or app to allow pop-ups to open. The `Investments` screen in Flinks Connect displays in a pop-up window and prompts the end-user to authenticate themselves by entering their login credentials. 6. Set up your iframe URL parameters to specify the type of data that you'll be collecting. 7. If your business case requires refreshing a card, implement the Wealth Reconnect Flow. 8. Optionally, keep track of each user's events in the iframe by setting up the Event Listener. 9. Choose how you want to receive Investments data (by API connection or automatically through Webhooks), then set it up. 10. Complete testing to confirm your integration is working as expected. 11. When everything is set up correctly and working as expected, go to production. ## Getting started To get started with investments, complete the following action: * [Choose how you want to receive investments data.](../../../api/wealth/getting-started#start-to-retrieve-investments-data) # Scheduled Refresh Source: https://docs.flinks.com/guides/connect/wealth/scheduled-refresh Set up scheduled (nightly) refreshes for Wealth investment accounts. The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. Scheduled Refresh automatically refreshes your customers' investment account data on a nightly basis, keeping positions, transactions, and securities up to date. ## Enabling scheduled refresh There are two ways to enable data refreshes for Wealth accounts: ### Automatic (scheduled) refresh Set `scheduleRefresh=true` in the Flinks Connect iframe URL to enable nightly automatic refreshes for new connections: ``` https://{instance}-iframe.private.fin.ag/?scheduleRefresh=true&... ``` Once enabled, Flinks automatically refreshes the account data on a nightly schedule (typically between 4 AM and 8 AM UTC). ### Manual refresh via iframe To trigger a manual refresh for an existing connection, include the `requestId` parameter in the iframe URL: ``` https://{instance}-iframe.private.fin.ag/?requestId={requestId}&... ``` This opens Flinks Connect with the existing connection context, allowing the customer to re-authenticate and refresh their data. ## Requirements For a scheduled refresh to succeed, the following criteria must be met: | Requirement | Details | | :------------------ | :--------------------------------------------------------------------- | | **Request history** | The account must have at least one successful connection | | **State** | The most recent connection state must be successful | | **RequestId age** | The `requestId` used must be within 4 weeks of the original connection | ## Monitoring refresh status Use the [/GetWealthNightlyRefreshStatus](/api/wealth/endpoints/account-linking/get-nightly-refresh-status) endpoint to check which investment accounts are configured for nightly refresh but are no longer refreshing due to errors. If a scheduled refresh fails due to an MFA challenge or other error, the customer will need to reconnect through Flinks Connect using the [Wealth Reconnect Flow](/guides/connect/wealth/wealth-reconnect-flow). # Wealth Reconnect Flow Source: https://docs.flinks.com/guides/connect/wealth/wealth-reconnect-flow Preserve the original loginId across reconnections to track customer investments over time. The Investments product will be retired on April 30, 2026. New integrations are not supported, and existing integrations will stop working after this date. By default, the Flinks Wealth product generates a new `loginId` each time an account is connected. A `loginId` is a unique identifier that’s linked to a particular customer. The Wealth Reconnect Flow saves the original `loginId` that’s generated the first time a customer connects their account and links it to all future reconnections. Build this flow into your Wealth integration if your business model requires you to: * Track your customers' investments or expenses over time. * Track multiple accounts from the same customer. * Manage a digital wallet; and more.

If your business case is listed above, this is mandatory.

If you do not integrate the Wealth Reconnect Flow by completing all of the steps below, your business case and billing process will be impacted.
## Requirements * If the requestid parameter is not included in the URL, a new loginId is generated and your business case will not be successful. * You must meet the following success criteria: * The customer must have connected their account before * The requestId in the iframe URL must be tied to a successful request * You’ve added the new parameter to the iframe URL within four weeks of when the account was first connected ## Set it up Complete the following steps to enable the Wealth Reconnect Flow into your integration. 1. Implement a Nightly Refresh on all new accounts by adding the parameter `scheduleRefresh=true` to the Flinks Connect iframe URL. It will look similar to the following: `https://{{instance}}-iframe.private.fin.ag/v2/?scheduleRefresh=true` 2. Set up your integration to prompt the end user to complete a manual refresh if a Nightly Refresh fails. If a card does not meet the Nightly Refresh Eligibility Criteria for an automatic refresh, the end user must reconnect their card using the iframe below: `https://{{instance}}-api.private.fin.ag/v3/{{customerId}}/investments/reconnect?requestId={{requestId}}` # Getting Started with the Dashboard Source: https://docs.flinks.com/guides/dashboard/getting-started Learn how to access the Flinks Dashboard, find your API credentials, and switch between environments. The Flinks Dashboard is a web interface that provides access to a collection of features to help you manage your financial data, monitor requests, and configure your integration. ## Accessing the Dashboard Your Flinks Representative provides Dashboard access during onboarding. If you need credentials or access, contact your Flinks Representative or open a ticket via the [Support Portal](https://help.flinks.com/support/home). ## Finding your API credentials Your API credentials are located in the Dashboard Settings page. 1. Log in to the Flinks Dashboard. 2. Navigate to **Settings**. 3. Go to the **Environments** tab. 4. Locate your environment (Sandbox or Production) and expand the row. You will find the following credentials: | Credential | Description | | :-------------- | :--------------------------------------------------------------------------------- | | **Customer ID** | Your unique `customerId` GUID used in API URL paths | | **API Domain** | Your instance-specific API base URL (e.g., `https://{company}-api.private.fin.ag`) | | **Iframe URL** | Your instance-specific iframe URL for Flinks Connect | The sandbox credentials listed in the Dashboard are for Dashboard testing only. For API sandbox testing, use the [Toolbox credentials](/guides/getting-started/testing-environments#toolbox-credentials). ## Switching between instances If you have access to multiple environments (e.g., Sandbox, Staging, Production), you can switch between them: 1. Click on your **profile icon** or the **environment selector** in the Dashboard header. 2. Select the instance you want to switch to from the dropdown. 3. The Dashboard reloads with data from the selected environment. Each instance is isolated: requests, data, and configuration from one environment do not affect another. ## What you can do in the Dashboard The Dashboard provides several tools and views: | Feature | Description | | :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Request Feed** | View and filter all connection requests, their status, and account details | | **Team Management** | Invite team members, assign roles, and configure security settings | | Request Insight | View the full details of an individual request, including its KYC/KYB information, status, account and transaction data | | Enrichment Reports | A suite of reports (Income, Credit Risk, User Analysis, Lending, and Business Analysis) that transform raw transactional data into real-time, actionable insights. Each report surfaces a set of attributes that reveal key aspects of your clients' financial profile and consumer behavior. | | External Data | Import data from third-party sources or upload financial documents, such as bank statements and void cheques, via Flinks Uploads. Uploaded documents are automatically processed and the relevant data is extracted. | | **Tools** | Download statements, refresh data, view Attributes reports, view fraud analysis verdicts, send Bank Verification Invitations, manage and delegate requests to users | | **Settings** | Manage API credentials, environments, and configuration | Explore each of these features in the following pages. # Request Feed Source: https://docs.flinks.com/guides/dashboard/request-feed Monitor and manage connection requests in the Flinks Dashboard Request Feed. The Request Feed is the main view in the Flinks Dashboard. It provides a real-time overview of all connection requests processed through your instance. ## What the Request Feed shows Each entry in the Request Feed displays: | Field | Description | | :-------------- | :----------------------------------------------------------------------------------- | | Name | The full legal name of the individual or business entity associated with the request | | **Status** | The current state of the request (see status types below) | | **Institution** | The financial institution the customer connected to | | **Request ID** | The unique session identifier | | **Login ID** | The permanent account connection identifier | | **Activity** | Manage and delegate requests to users | | **Timestamp** | When the request was initiated | | **Email** | The contact email address associated with the individual or business entity | | Address | The registered or primary address on file for the individual or business entity | | **Tag** | Custom tag if provided via the `Tag` parameter in the iframe URL | ## Status types | Status | Description | | :------------------------------- | :------------------------------------------------------ | | **Completed** | The request finished successfully and data is available | | **In Progress** | The request is currently being processed | | **Error** | The request encountered an error during processing | | **Answering Security Challenge** | The customer is responding to an MFA prompt | | **Partially Completed** | Account summary completed; details still processing | | **Operation Pending** | Data extraction is ongoing in the background | For a full list of status codes and their meanings, see [Error Codes](/api/authorize/error-codes). ## Filtering requests You can narrow down the Request Feed using the following filters: * **Date range**: Filter by when requests were created * **Financial institution**: Show requests for a specific bank or financial institution * **Connection type**: Filter by Banking or Investments * **Activity**: Filter by user activity, completed, assigned, unassigned, or need review * **Status**: Show only completed, in-progress, error or all requests ## Viewing account details To view the details of a specific request: 1. Click on a request row in the feed. 2. The detail view shows the customer's account information, including: * KYC data (name, address, email, phone) * Account balances and types * Transaction history * Any warnings or errors encountered # Team Management Source: https://docs.flinks.com/guides/dashboard/team-management Invite team members, assign roles, and configure security settings in the Flinks Dashboard. The Flinks Dashboard supports team collaboration with role-based access, request assignment, and security features. ## Inviting team members To invite a new member to your Dashboard: 1. Navigate to **Settings** > **Team**. 2. Click **Send Invite**. 3. Enter the team member's email address and assign a role. The permissions for each role are displayed when selected. 4. The invitee receives an email with instructions to set up their account. ## Security settings ### Two-Factor Authentication (2FA) Only the Dashboard owner can enable 2FA to add an extra layer of security to Dashboard logins: 1. Navigate to **Settings** > **Security**. 2. Enable **Two-Factor Authentication**. 3. Each team member will be prompted to set up 2FA on their next login. 2FA supports Canadian and US phone numbers for SMS verification codes. ### IP whitelisting Restrict Dashboard access to specific IP addresses: 1. Navigate to **Settings** > **Security**. 2. Enable **IP Whitelisting** (owner-only permission). 3. Add the IP addresses that should be allowed access. 4. Select a category for each IP address: **VPN**, **Office**, **Home**, or **Custom** (allows you to enter a custom label). Once IP whitelisting is enabled, it is strictly enforced: users outside of the whitelisted IPs will be denied access, even if 2FA is enabled. Disabling IP whitelisting does not automatically disable 2FA. These are independent security features. If you disable IP whitelisting, 2FA remains active if it was previously enabled. # Dashboard Tools Source: https://docs.flinks.com/guides/dashboard/tools Use Dashboard tools to download statements, refresh data, view Attributes reports, and send Bank Verification Invitations. The Flinks Dashboard includes several tools for managing and reviewing your customers' financial data. ## Downloading statements If you have bank-issued PDF statements enabled for your instance, you can download them directly from the Dashboard: 1. Open a request from the Request Feed. 2. Navigate to the account details. 3. Click **Download Statement** to save the PDF. For BMO accounts, statements are available in CSV format instead of PDF. For more information about enabling statement retrieval, see [Bank Statements](/guides/connect/bank-statements). ## Refreshing data You can manually refresh a customer's account data from the Dashboard: 1. Open a request from the Request Feed. 2. Click **Refresh Data**. 3. Choose the refresh period: * **90 days**: Retrieves the last 90 days of transaction history * **360 days**: Retrieves the last 360 days of transaction history After clicking Refresh, the account's financial institution may prompt a new security question (MFA). When this happens, the refresh cannot be completed from the Dashboard: you will see an in-progress status indicating the request is waiting for a security challenge response. To proceed, the MFA must be answered by the end user through Flinks Connect (iframe). For more details, see [Reconnect](/guides/connect/resume-and-reconnect). Automatic, end-user-less refreshes are no longer supported for most financial institutions. To keep account data current, use [Reconnect](/guides/connect/resume-and-reconnect) to bring the end user back into Flinks Connect for a live refresh. ## Viewing Attributes reports If your instance has Attributes enabled, you can view enrichment reports directly in the Dashboard: 1. Open a request from the Request Feed. 2. The names of your enabled Attributes reports appear on the right side of the **Overview** tab. 3. Select a report to view its insights. Each report corresponds to an Attributes package enabled on your instance. For more information about Attributes packages, see [Attributes Packages](/guides/enrich/attributes-packages). ## Assigning requests Team members can assign requests to themselves or others from the account's detail: 1. Open a request from the [Request Feed](/guides/dashboard/request-feed). 2. Click the **Take Action** dropdown. 3. Choose from the following actions: | Action | Description | | :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Assign** | Assign the request to a specific team member | | **Self-Assign** | Assign the request to yourself | | **Unassign** | Remove the current assignment from the request | | **Manage** | Re-assign the request to a different team member. Only visible when the request is already assigned to you or by you. A request can only be assigned to one person at a time | | **Review Needed** | Flag the request for review by another team member | | **Review Completed** | Mark a previously flagged request as reviewed | Once a request is assigned to a team member, a status indicator appears under **Activity** in the [Request Feed](/guides/dashboard/request-feed). ## Bank Verification Invitation (BVI) Send a bank verification link to a customer via email or SMS, allowing them to connect their account without your direct involvement. This feature is exclusive to Hosted Solution (Flinks Express) integrations. BVI is a free optional add-on. To enable it, contact your Sales Representative or Relationship Manager. 1. Navigate to **Insights** > **Invites**. 2. Click **Send new invite**. 3. Enter the client's name, Loan ID (optional), and email address or phone number. 4. Optionally, enable the **Preselect Institution** toggle to select a specific financial institution for the customer. 5. Click **Send**. 6. The customer receives a link to complete the bank connection flow through Flinks Connect. You can track the status of sent invitations in the BVI tool: | Status | Description | | :------------ | :----------------------------------------------------------- | | **New** | The invitation has been created but not yet sent | | **Sent** | The invitation has been delivered | | **Received** | The customer has received the invitation | | **Clicked** | The customer has clicked the invitation link | | **Opened** | The customer has opened the bank connection flow | | **Completed** | The customer has successfully connected their account | | **AuthError** | The customer's bank connection attempt failed authentication | | **Error** | An error occurred during the invitation process | # Attributes Source: https://docs.flinks.com/guides/enrich/attributes Transform raw transactional data into actionable financial insights using Flinks Attributes. Attributes is a Flinks solution that allows you to automatically transform raw transactional data into real-time, actionable insights using data attributes. With over **6,000+ data points** available, each attribute reveals information about your customer's financial profile and consumer behaviour. Clients using Attributes have reported **50-80% cost reduction** in data processing compared to building categorization and analysis in-house. Put simply, data attributes are outputs of organized and transformed transactional data. You'll receive enriched data, through attributes, to gain a better understanding of your clients' behaviour without having to deal with categorization, cleaning, or any of the tedious tasks that are typically required when working with raw data. Flinks offers several attribute packages that you can choose from. We structure these packages in tiers, based on the data you want to receive. For more information about our Enrichment solution, speak with your Flinks Representative. ## How Enrich works
Flowchart depicting the process in which data is enriched. This process includes three stages: Ingesting raw data, cleaning and categorizing the data, and outputting the data attributes.
To get started with Enrichment, complete the following: * [Choose an attributes package](./attributes-packages) * [Start the set up process](./setup-attributes) ## Business account data When processing business accounts, Flinks returns a `Holder.Name` field containing the business name. There are some important considerations for business data: * **Single name field**: `Holder.Name` returns one business name. Separate fields for legal name vs. operating name (DBA) are not available through standard account linking. * **Name format varies**: Financial institutions format business names differently. Some include suffixes (Inc., Ltd., LLC), while others use abbreviated forms. For deeper business analysis, including cashflow insights, revenue estimation, and business health indicators, use the [Business Attributes](/api/enrich/endpoints/business-attributes/index) endpoints in the Enrich API. # List of Attributes packages Source: https://docs.flinks.com/guides/enrich/attributes-packages Browse available Attributes packages including Income, Lending, Credit Risk, and Business Analysis.
| **PACKAGE** | **DESCRIPTION** | **ATTRIBUTES** | **ENDPOINT** | | :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------ | | **Income** | Use this data when you need a high-level overview of your users. | Total Income, Employment Income, and Government Income. | [`/GetIncomeAttributes`](../../api/enrich/endpoints/consumer-attributes/get-income-attributes) | | **Lending** | Use this data when underwriting a user based upon their transactional behaviour. | Income, Overall Risk Analysis, Predictive Risk and Cash-Flow Analysis, Specific Risk Analysis, and Liability Analysis. | [`/GetLendingAttributes`](../../api/enrich/endpoints/consumer-attributes/get-lending-attributes) | | **Credit Risk** | Use this data to conduct a high-level risk analysis of your users. | Financial Information, Employment Income sources, Non-Employment Income sources, Loan Payments, Bill Payments, and more. | [`/GetCreditRiskAttributes`](../../api/enrich/endpoints/consumer-attributes/get-credit-risk-attributes) | | **User Analysis** | This is an advanced use case that combines the Income and Credit Risk packages into one, and adds an additional layer for Fraudulent/Primary Account Detection. Use this data when you need to consider both Income and Credit Risk for the same user. | Income, Credit Risk, Fraudulent/Primary Account Detection. | [`/GetUserAnalysisAttributes`](../../api/enrich/endpoints/consumer-attributes/get-user-analysis-attributes) | | **Business Analysis** | This is an advanced use case that allows you to efficiently break out all important aspects of a business account. Use this data when you're underwriting or analyzing business-specific accounts. | Business Revenue (Income Analysis), Loan Deposits Analysis, Operating Expenses Analysis, Liabilities and Loan Payments Analysis, and Fees and Other Expenses. | [`/GetBusinessAnalysisAttributes`](../../api/enrich/endpoints/business-attributes/get-business-analysis-attributes) | | **All Consumer Attributes** | All available attributes that Flinks currently provides, and all transactions that are related to these attributes. | For a list of all consumer attributes that we have available, review our [Consumer Attributes Library](https://docs.google.com/spreadsheets/d/e/2PACX-1vTD11rgYE-kgSxowER0wU1Y3xuMMxzieE-0v61stEftVlaAzLuP4RHctsetfJmaDyRSXXDl4uRSBGx3/pubhtml#). | [`/GetAllAttributes`](../../api/enrich/endpoints/consumer-attributes/get-all-attributes) |
Select a package to read more about the Attributes available in each package. You can call more than one Attributes package with the same `requestId`. Attributes calls do not complete the session, so a single `requestId` can retrieve multiple packages.

Income

Use the [/GetIncomeAttributes](/api/enrich/endpoints/consumer-attributes/get-income-attributes) endpoint if you need a high-level overview of your users' income sources.


This is a primary basic use-case of Attributes and is often utilized by organizations that need a high-level, standard overview of your users Total Income, Employment Income, and Government Income. It will provide the following Attributes to enable a quick and easy standard Income verification. This is often used in manual processes.

Income Attributes

Please find a breakdown of the Attributes contained within this use-case below:

Note:

If you need a deeper review of Income, please refer to our Lending use-case.

Employer Income:

  • Employer name
  • Average monthly (complex)
  • Trend
  • Sum per calendar month
  • Count per calendar month

Non-Employer Income:

  • Average monthly (complex)

Government Income:

  • Average monthly (complex) (overall Government Income)
  • Sum of Government Income per calendar month
  • Count of Government Income per calendar month
  • Sum of Employment Insurance Income in the last 90 days
  • Sum of Social Assistance Income in the last 90 days
  • Sum of WSIB Income in the last 90 days
  • Sum of Pension Income in the last 90 days
  • Sum of Child Support Income in the last 90 days
  • Sum of Other Government Income in the last 90 days

Others:

  • Sum of Total Income per calendar month
  • Sum of Total Credits per calendar month
  • Account age in days
  • Average monthly free cash flow

Lending

Use the [/GetLendingAttributes](/api/enrich/endpoints/consumer-attributes/get-lending-attributes) endpoint if you need a comprehensive breakdown of all of your users income sources, deep credit risk analysis, and all necessary data points for underwriting your users.


The Lending Attribute package is designed specifically for underwriting a user based upon their transactional behaviour and is also an advanced use-case. It provides the necessary Attributes for both manual and automated underwriting methodologies. It covers most aspects of Income, Overall Risk Analysis, Predictive Risk and Cash-Flow Analysis, Specific Risk Analysis and Liability Analysis. This is our most comprehensive package offering before moving to the full library, offering a total of 750 data points on each end-user.

Lending Attributes

Please find a breakdown of the Attributes contained within this use-case below:

Income Analysis

The following is the selection of Income Analysis Attributes covered by the Lending Attributes package.

Total Income:

  • Average monthly (complex)
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Employer Income (Overall):

  • Employer name
  • Average monthly (complex)
  • Average amount
  • Estimated Annual Net
  • Frequency
  • Trend
  • Sum per calendar month
  • Count per calendar month

Employer Income (Primary):

  • Employer Name
  • Average monthly (complex)
  • Average amount
  • Estimated Annual Net
  • Frequency
  • Trend
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Employer Income (Secondary):

  • Employer Name
  • Average monthly (complex)
  • Average amount
  • Estimated Annual Net
  • Frequency
  • Trend
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Employer Income (Other):

  • Employer Name
  • Average monthly (complex)
  • Average amount
  • Estimated Annual Net
  • Frequency
  • Trend
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Non-Employer Income:

  • Average monthly (complex)
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Government Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Employment Insurance Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Workplace Safety Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Disability Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Social Assistance Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Child Support Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Pension Income:

  • Average monthly (complex)
  • Average amount
  • Total detected
  • Frequency
  • Last two deposit dates
  • Sum per calendar month
  • Count per calendar month

Insurance Income:

  • Average monthly (complex)
  • Total detected
  • Sum per calendar month
  • Count per calendar month
  • Recurring Deposits (All)
  • Average monthly (complex)
  • Sum per calendar month

Overall Risk Analysis

The following is the selection of Overall Risk Analysis Attributes covered by the Lending Attributes package.

Account Analysis:

  • Purchasing trend
  • Deposit trend
  • Overall activity trend
  • Count of active days
  • Active days trend
  • Average monthly free cash flow
  • Account age in days
  • Average monthly recurring payments
  • Average monthly recurring deposits

Overall Balance Analysis:

  • Balance trend
  • Maximum balance
  • Minimum balance
  • Current balance
  • Balance as of 90 days ago
  • Count of days with a negative balance (in the last 90 days)

Specific Balance Analysis:

  • Average closing balance day of any income
  • Average closing balance day after any income
  • Average closing balance day of employer income
  • Average closing balance day after employer income
  • Average closing balance day of government income
  • Average closing balance day after government income

Specific Risk Analysis

The following is the selection of Specific Risk Analysis Attributes covered by the Lending Attributes package.

NSF Fees:

  • Average monthly count
  • Count of total detected
  • Count last 30 days
  • Count last 60 days
  • Count last 90 days
  • Count last 6 months
  • Count on the day of employer income
  • Count on the day after employer income
  • Count on the day of government income
  • Count on the day after government income

Stop Payment Fees and Reversals:

  • Count of fees last 30 days
  • Count of fees last 60 days
  • Count of fees last 90 days
  • Count of reversals last 30 days
  • Count of reversals last 60 days
  • Count of reversals last 90 days

Detection Attributes:

  • Has employment income in the last 7 days
  • Has employment income in the last 14 days
  • Has employment income in the last 30 days
  • Has government income in the last 7 days
  • Has government income in the last 14 days
  • Has government income in the last 30 days
  • Is employment loss detected?
  • Has overdraft?

Committed Transfers:

  • Average monthly recurring transfers out (complex)
  • Average monthly recurring transfers in (complex)

Loan Deposits:

  • Average monthly (complex)
  • Total detected
  • Sum last 30 days
  • Sum last 60 days
  • Sum last 90 days

Liability Analysis

The following is the selection of Liability Analysis Attributes covered by the Lending Attributes package.

Overall Loan Payments:

  • Average monthly (complex)
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Micro-Loan Payments:

  • Micro-Lender name
  • Average monthly (complex)
  • Average amount
  • Frequency
  • Count of distinct micro-lenders detected
  • Sum per calendar month
  • Count per calendar month

Mortgage Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Auto Loan Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Student Loan Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Other Loan Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Telecom Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Utility Payments:

  • Average monthly (complex)
  • Average amount
  • Frequency
  • Sum per calendar month
  • Count per calendar month

Credit Risk

Use the [/GetCreditRiskAttributes](/api/enrich/endpoints/consumer-attributes/get-credit-risk-attributes) endpoint if you need a high-level overview of your users' basic income sources and credit risk measures.


This is a primary basic use of Attributes and is often utilized by organizations that need to conduct a high-level risk analysis of their users. It contains basic Attributes needed to view your users overall Financial Information, Employment Income sources, Non-Employment Income sources, Loan Payments, Bill Payments, and Additional Risk Analysis measures. This is often used in manual processes.

Credit Risk Attributes

Please find a breakdown of the Attributes contained within this use-case below:

Account Overview:

  • Minimum Balance Detected (Last 90 days)
  • Days with a Negative Balance
  • Average Monthly Free Cash Flow
  • Balance Trend

Employer Income Overview:

  • Employer Name
  • Average Monthly Employer Income
  • Employer Income Trend
  • Sum of Employer Income (Per Month, last 12 months, 13 Attributes) \*
  • Count of Employer Income (Per Month, last 12 months, 13 Attributes) \*

Non-Employer Income Overview:

  • Average Monthly Non-Employer Income
  • Average Monthly Government Income
  • Total Deposits Trend

Loan Payments Breakdown:

  • Average Monthly Auto-Loan Payments
  • Average Monthly Mortgage Payments
  • Average Monthly Micro-Loan Payments
  • Average Monthly Student Loan Payments
  • Average Monthly Other Loan Payments

Committed Bill Payments Breakdown:

  • Average Monthly Utility Payments
  • Average Monthly Telecom Payments

Additional Risk Analysis:

  • Count of NSF Fees (Last 90 days) \*
  • Count of Stop-Payment Fees (Last 90 days) \*
  • Average Monthly Micro-Loan Payments
  • Micro-Lender Name
  • Average Monthly Expenditure
  • Account Age in Days

User Analysis

Use the [/GetUserAnalysisAttributes](/api/enrich/endpoints/consumer-attributes/get-user-analysis-attributes) endpoint if you need a deeper, combined view of your users' income sources, credit risk measures, and potential fraudulent flags.


The User Analysis use-case is the first of our "advanced" use-cases. This use-case combines the previous two packages (Income and Credit Risk) into one use-case and adds an additional "fraudulent/primary account detection" layer. This use-case is often utilized where both Income and Credit Risk are important factors to consider for the same user, and is often the starting point for organizations automation processes.

User Analysis Attributes

Please find a breakdown of the Attributes contained within this use-case below:

Employer Income:

  • Employer Name
  • Average Monthly Employer Income
  • Employer Income Trend
  • Sum of Employer Income (Per Month, last 12 months, 13 Attributes) \*
  • Count of Employer Income (Per Month, last 12 months, 13 Attributes) \*

Non-Employer Income:

  • Average Monthly Non-Employer Income

Government Income:

  • Average Monthly Government Income
  • Sum of Government Income (Per Month, last 12 months, 13 Attributes) \*
  • Count of Government Income (Per Month, last 12 months, 13 Attributes) \*
  • Sum of Employment Insurance Income (90 days) \*
  • Sum of Social Assistance Income (90 days) \*
  • Sum of WSIB Income (90 days) \*
  • Sum of Pension Income (90 days) \*
  • Sum of Child Support Income, Government (90 days) \*
  • Sum of Other Government Income (90 days) \*

Other Income Attributes:

  • Sum of Total Income (Per Month, last 12 months, 13 Attributes) \*
  • Sum of Total Credits (Per Month, last 12 months, 13 Attributes) \*

Account Risk Overview:

  • Minimum Balance Detected (Last 90 days)
  • Days with a Negative Balance
  • Average Monthly Free Cash Flow
  • Balance Trend

Loan Payments Breakdown:

  • Average Monthly Auto-Loan Payments
  • Average Monthly Mortgage Payments
  • Average Monthly Micro-Loan Payments
  • Average Monthly Student Loan Payments
  • Average Monthly Other Loan Payments

Committed Bill Payments Breakdown:

  • Average Monthly Utility Payments
  • Average Monthly Telecom Payments

Additional Risk Analysis:

  • Count of NSF Fees (Last 90 days) \*
  • Count of Stop-Payment Fees (Last 90 days) \*
  • Average Monthly Micro-Loan Payments
  • Micro-Lender Name
  • Average Monthly Expenditure

Fraud Detection Attributes:

  • Account Age in Days
  • Active Days in the Account (Last 90 days)
  • Balance Trend
  • Overall Activity Trend
  • Debit Activity Trend
  • Credit Activity Trend
  • Is Employer Income Detected?
  • Average Monthly Recurring Payments

Business Analysis

Use the [/GetBusinessAnalysis](/api/enrich/endpoints/business-attributes/get-business-analysis-attributes) endpoint if you would like to receive Business Analysis Attributes, specifically focused on SMB and corporate accounts.


The Business Analysis use-case is the first of our "advanced" use-cases for businesses specifically. This use-case is primarily utilized when you are underwriting or analyzing business specific accounts. It enables your team to quickly, easily, and efficiently break out all important aspects of a users account. This includes a Business Revenue (Income) Analysis, Loan Deposits Analysis, Operating Expenses Analysis, Liabilities and Loan Payments Analysis, and finally an analysis of Fees and Other Expenses. This use-case is primarily used within our Client Dashboard through an auto-generated report, but can often be the starting point for organizations automation processes for their business clients.

Business Analysis Attributes

Please find a breakdown of the Attributes contained within the use-case below:

Income Analysis

The following is the selection of Income Analysis Attributes covered by the Business Analysis Attributes package.

Overall Operating Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per Calendar month

Merchant Service Provider Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Transfer Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Branch Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Vendor Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Payroll Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Credit Card Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Operating Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Overall Government Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Tax Rebates and Refunds:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Government Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Types of Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Insurance Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Rent Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

All Other Income:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Loan Deposits Analysis

The following is the selection of Loan Deposits Analysis Attributes covered by the Business Analysis Attributes package.

Overall Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Business Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Mortgage Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Micro-Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Auto Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Loan Deposits:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Operating Expense Analysis

The following is the selection of Operating Expense Analysis Attributes covered by the Business Analysis Attributes package.

Overall Operating Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Vendor Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Cash Withdrawals:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Payroll Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Credit Card Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Operating Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Liabilities Analysis

The following is the selection of Liabilities Analysis Attributes covered by the Business Analysis Attributes package.

Overall Liabilities:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Insurance Payments:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Rent Payments:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Telecom Payments:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Utility Payments:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Overall Loan Payments:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Fees Breakdown

The following is the selection of Fees Breakdown Attributes covered by the Business Analysis Attributes package.

Overall Fees:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Bank Fees:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

NSF Fees:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other Fees:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Other (Non-Operating) Expenses

The following is the selection of Other (Non-Operating) Expenses Attributes covered by the Business Analysis Attributes package.

Other Expenses:

  • Average monthly (complex)
  • Average deposit
  • Trend
  • Frequency
  • Last two deposit dates
  • Total detected
  • Sum per calendar month
  • Count per calendar month

Restricted location for this endpoint


Please note that we currently only support Business Attributes for full production use-cases in the Canadian market.
If you are looking to use these Attributes in the US Market, please reach out to the Flinks team and we will place you on the waitlist.
# Categorization Guide Source: https://docs.flinks.com/guides/enrich/categorization-guide Understand the difference between Broad Categorization and Transaction Categorization, income detection, and merchant normalization. Flinks offers multiple categorization capabilities that transform raw transaction data into structured, actionable insights. This guide explains the different categorization types and how they work together. ## Broad Categorization vs Transaction Categorization Flinks provides two levels of categorization: ### Broad Categorization Assigns a **Category** and **SubCategory** to every transaction. This is included as part of the Enrich product and provides a standardized view of spending and income patterns. * Covers all transaction types (debits and credits) * Assigns one of 15+ primary categories (e.g., Food & Dining, Income, Utilities) * Available for both Canadian and US transactions * For the full list, see [Transaction Categorization](/guides/enrich/transaction-categorization) ### Transaction Categorization (Attributes) Goes deeper than broad categorization by extracting specific financial signals used in lending, underwriting, and risk assessment. Available through Enrich [Attributes packages](/guides/enrich/attributes-packages), this includes: * Income detection and classification * Recurring payment identification * NSF (non-sufficient funds) and overdraft tracking * Loan and cash advance detection * Custom attribute packages tailored to specific use cases ## Income detection Flinks identifies and classifies income transactions, distinguishing between: * **Employment income**: Regular salary and wage deposits * **Government benefits**: Social assistance, tax refunds, pension payments * **Freelance / gig income**: Irregular income from multiple sources * **Other income**: Interest, dividends, rental income ### Use cases | Use case | How income detection helps | | :---------------------------- | :------------------------------------------------------------------------ | | **Lending** | Verify stated income against actual deposits for affordability assessment | | **BNPL (Buy Now, Pay Later)** | Assess repayment capacity in real time before approving a purchase | | **Account opening** | Understand a customer's income profile during onboarding | ## Categorization accuracy Flinks categorization models achieve **>85% accuracy** across transaction types, with continuous improvement as models are retrained on new data. Factors that affect accuracy: * **Transaction string quality**: Banks format transaction descriptions differently. Some include merchant names, while others use abbreviated codes. * **Region and language**: Models perform best on English and French transactions in Canada and the US. * **Transaction type**: Common merchants (major retailers, utilities) have higher accuracy than niche or local businesses. ## Merchant normalization Raw transaction descriptions from banks are often cryptic: ```text theme={null} CHECKCARD 0315 STARBUCKS STORE 12345 TORONTO ON ``` Flinks normalizes these into clean, readable merchant names: ```text theme={null} Starbucks ``` Merchant normalization: * Strips transaction codes, dates, and location suffixes * Maps variations of the same merchant to a single canonical name * Works across different banks and transaction formats This makes it possible to aggregate spending by merchant across accounts and institutions. ## Custom rules Clients can layer their own categorization rules on top of Flinks attributes. This is useful for: * Reclassifying transactions based on your business logic * Adding industry-specific categories not in the standard taxonomy * Flagging specific merchants or transaction patterns Custom rules are applied after Flinks categorization, so you always receive the base categorization plus your custom overrides. ## Coverage | Region | Broad Categorization | Transaction Categorization (Attributes) | | :------------ | :------------------- | :-------------------------------------- | | Canada | Supported | Supported | | United States | Supported | Supported | Accuracy varies by region and language. Transaction string quality depends on the financial institution: some banks provide detailed descriptions while others use abbreviated codes. ## Related resources * [Transaction Categorization](/guides/enrich/transaction-categorization) * [Attributes](/guides/enrich/attributes) * [Attributes Packages](/guides/enrich/attributes-packages) * [Categories API](/api/enrich/endpoints/attributes-libraries/categories) # Connect to Upload APIs Source: https://docs.flinks.com/guides/enrich/connect-to-api Explore the available Upload endpoints for requesting Attributes using external data. This section will break down the available endpoints that you can call with External Data so that you can understand the differences better and which one may suit your integration the most. ## /Upload (Custom) `{instance}/{version}/{customerId}/attributes/upload` This is the core /Upload Endpoint and is the equivalent of the standard custom /Attributes endpoint. This endpoint should be used where you have a custom set of Attributes to request, and would like to specify those directly within the JSON request body. You must already have a list of Attributes names that you would like to include before starting this integration. ## All Attributes `{instance}/{version}/{customerId}/attributes/upload/AllAttributes` This endpoint is an extension of the core /Upload endpoint as described above, and is the most widely used /Upload endpoint (a good place to start). When using this endpoint you will not need to specify a list of Attributes or AttributesDetails to request. It will automatically return all available attributes that we have in production at that specific request time. By default, if you call this endpoint specifying any Attributes, we will override that request and return all attributes. ## Use case specific endpoints Flinks also maintains multiple 'use case' endpoints. Rather than submitting your Attributes within the request body (as is the case for the standard /Upload call) these endpoints will automatically return all attributes that fall under the specific use case requested. Please refer to the Attributes documentation and Quickstart Guide for a full list of Attributes that are included in each of these endpoints. By default, if you call this endpoint specifying any Attributes, Flinks will override that request to return the specific Attributes contained within that use case. ### User Analysis use case: `{instance}/{version}/{customerId}/attributes/upload/UserAnalysis` This endpoint will return all `User Analysis` attributes. ### Income use case: `{instance}/{version}/{customerId}/attributes/upload/Income` This endpoint will return all `Income` attributes. Credit Risk use case: `{instance}/{version}/{customerId}/attributes/upload/CreditRisk` This endpoint will return all `Credit Risk` attributes.

Note on usage of endpoints

Your team may only have access to one of the above use cases (dependent on the package taken at the time of onboarding). Please ensure that you only set up requests to the available endpoints for your integration to avoid any complications.
# Enrich Your Data Source: https://docs.flinks.com/guides/enrich/enrich-your-data Enrichment is a Flinks solution that allows you to automatically transform raw transactional data into real-time, actionable insights using `Attributes`. Each data attribute reveals information about your customer's financial profile and consumer behaviour. Put simply, data attributes are outputs of organized and transformed transactional data. You'll receive enriched data, through attributes, to gain a better understanding of your client's behaviour without having to deal with categorization, cleaning, or any of the tedious tasks that are typically required when working with raw data. Flinks offers several attributes packages that you can choose from. We structure these packages in tiers, based on the data that you want to receive. For more information about our Enrichment solution, please speak with your Flinks Representative. ## Types of data that you can receive from Flinks Flinks can return a wide variety of data from the accounts we are connected to, including the following: ### Personal information * Name * Address * Civic Address * City * Province or State * ZIP or Postal Code * PO Box * Country * E-mail * Telephone Number ### Account information * Title * Balance * Transit or Routing Number * Institution Number * Account Number * Category and Type ### Transaction history * Transaction Date * Transaction Description * Credit or Debit Amount * Current Balance ## How it works Attributes can be put together to gain a better understanding of your clients' behaviour. We currently provide use-case-specific packages of `Attributes`, as well as custom packages. ### Important note on Use-Case endpoints Each of the use cases are detailed via their own Use-Case endpoint below. If you have a subscription to a specific use-case, these are the endpoints you should use. You will not be able to call the [`/GetAllAttributes`](../../api/enrich/endpoints/consumer-attributes/get-all-attributes) or [`/Attributes`](../../api/enrich/endpoints/consumer-attributes/attributes) endpoints. ### Important note on other endpoints If you have a full subscription to our full library, you are able to choose between use-case endpoints, the [`/GetAllAttributes`](../../api/enrich/endpoints/consumer-attributes/get-all-attributes) endpoint, and/or our customizable Attributes endpoint for your specific requirements. ### Important flow for integration You will have to set up an additional 3 API calls to pull back Attributes. You should follow the below API call flow to ensure no errors:

An important note:

The previous call to [/GetAccountsDetail](../../api/connect/endpoints/account-linking/get-accounts-detail) **must** be completely finished before initiating the series of calls below, otherwise, you may receive a `202 OPERATION_PENDING` error.
1. Make a call to [`/Authorize`](../../api/authorize/endpoints/authorize) with the parameter `MostRecentCached:true` to exchange your `loginId` for a new `requestId` and open a session. 2. Make a call to [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) with the parameter `requestId` to pull back transactional data ready for analysis. 3. Set up your job to call the specific [`/Attributes`](../../api/enrich/endpoints/consumer-attributes/attributes) endpoint, required only when the previous [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) call has been successfully completed.

Operations accounts only

Operations is the only supported value.
# Getting Started with Enrich Source: https://docs.flinks.com/guides/enrich/getting-started This page will walk you through the general steps to set up Enrich in your integration. ## Choose an Attributes package Flinks offers the following attributes packages for you to choose from: * Income Attributes * Lending Attributes * Credit Risk Attributes * User Analysis Attributes * Business Analysis Attributes * All Consumer Attributes [Read more on what Attributes package(s) we offer](./attributes-packages/) so you can choose what is best for your configuration. ## Complete the general integration steps Complete the following to set up your product: 1. Set up your environments. 2. Connect to our APIs. 3. Complete your product-specific integration steps (you can find these in the following section). 4. Access your Flinks Dashboard. 5. Complete testing. ## Complete the Enrich-Specific integration steps Complete the following steps to set up Enrich: 1. Choose which Attributes package(s) you want to add to your configuration. 2. Ask your Flinks Representative to enable Attributes in your Flinks Connect integration. 3. After the end user successfully connects their account, Flinks Connect provides a `loginId` that allows you to access the data connected for that particular user through our APIs. # Receive Your Attributes Data Source: https://docs.flinks.com/guides/enrich/receive-your-data Set up the API call flow to retrieve enriched Attributes data using a loginId and requestId. By now, you should already be familiar with most of the steps to set up Data Aggregation and the process of retrieving Financial Data. This section will just provide a quick recap as to what the required steps are that need to be completed before setting up the [/Attributes](../../api/enrich/endpoints/consumer-attributes/attributes) API call. ## Overview Anytime you want to access an end user's financial data, you will need to use the `loginId` associated to that user's account to make a request to our API. Here is a step-by-step overview of the API calls flow: 1. A successful connection redirects the user to the landing page of your choice. At this moment, a `loginId` is issued and sent from your client-side to your server. 2. When you initiate an API call, the `loginId` is exchanged for a `requestId` with Flinks API and a session is initiated. 3. Once a session is active, you can request for data and receive it. If you place a request while a session is loading, it may return an error. If this happens, retry after the session finishes loading.

Note on making API calls

If you have not already set up these API calls, please refer to [Flinks API Reference ](../../api-home) for more details about setting this up.
#### Checklist You should now be able to: * Receive a new requestId with incoming `loginId` by calling the Authorize endpoint with the parameter `MostRecentCached:true`. * Request ready-to-deliver data with the [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) endpoint and handle `202 OPERATION_PENDING` responses. * Request pending-to-deliver data with the [`/GetAccountsDetailAsync`](../../api/connect/endpoints/account-linking/get-accounts-detail-async) endpoint for the previous `202 OPERATION_PENDING` responses. # Set Up Attributes Source: https://docs.flinks.com/guides/enrich/setup-attributes This page will walk you through the steps required to set up Attributes in your integration. ## Choose an Attributes package Flinks offers the following attribute packages for you to choose from: * Income Attributes * Lending Attributes * Credit Risk Attributes * User Analysis Attributes * Business Analysis Attributes * All Consumer Attributes [Read more on what Attributes package(s) we offer](./attributes-packages) so you can choose what is best for your configuration. ## Environments you'll need Flinks provides two environments to you when you start the integration process: * **Sandbox:** a testing space that you use to set up your Flinks integration and test that it's working correctly. * **Production:** a live production space that allows you to connect real accounts and start using your Flinks product. ## Set up the sandbox environment Flinks provides you with a Sandbox environment that you can use to try out our products. Use it to test your integration and confirm everything is working as expected. Here's what to do with it: 1. When you're ready to get started, contact your Flinks Representative and ask them to set you up with a test environment. 2. Flinks provides you with a test institution, Flinks Capital, that you can use for testing purposes. For security and privacy reasons, you can't make live connections to real financial institutions in this environment. 3. Build your integration and connect to our APIs using the Sandbox environment. 4. When you're ready, move over to the Production environment. ## Set up the production environment Ask your Flinks Representative to set you up with a private Production environment in advance, so that you're ready to go-live when testing is complete. When the development and testing process in the Sandbox environment is complete, it's time to move your Flinks configuration over to the Production environment. Make sure that all of your API calls and iframe URLs are pointing to your private Production environment and not the Sandbox environment. Once you go live, you can start connecting to real accounts and experience the full Flinks service. You can still make requests to Flinks Capital in the Production environment at no cost, but you'll receive an invoice for all successful live requests. ## Set Up Your API Connection To set up your API Connection with Flinks, you will have to make your first API call before receiving data. The following sections will walk you through this process. ### Make your first API call This is the first API request that needs to be executed whenever you want to retrieve data from a connected account. Flinks API needs to confirm the validity of the request and to know which account you want to retrieve data from. To do so, you will exchange your `loginId` for a new `requestId`. For that, the [`/Authorize`](../../api/authorize/endpoints/authorize) endpoint needs to be called using a POST method, and it requires a loginId and the parameter `MostRecentCached:true`. To make it more concrete, let's suppose that you are opening a new session to retrieve the data for the `loginId: 5e115eac-1209-4f19-641c-08d6d484e2fe`: ```curl curl theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize \ -H 'Content-Type: application/json' \ -d '{ "LoginId":"5e115eac-1209-4f19-641c-08d6d484e2fe", "MostRecentCached":true }' ``` This is how your response will look like: ```json Json theme={null} { "Links": [...], "HttpStatusCode": 200, "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` The `loginId` (`5e115eac-1209-4f19-641c-08d6d484e2fe`) was successfully exchanged for a `requestid` (`1243c283-e0ca-4fda-a5e4-343068430190`). Now that the session is active, we have everything we need to place a call to retrieve financial data. ### Receive data from us The next step is for your server to send a request for data. This request uses the [`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail) endpoint, which also needs to be made using a POST method, and only requires the acquired `requestId`. Continuing our example using our `requestId` (`1243c283-e0ca-4fda-a5e4-343068430190`), it looks like this: ```curl curl theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/GetAccountsDetail \ -H 'Content-Type: application/json' \ -d '{ "RequestId":"1243c283-e0ca-4fda-a5e4-343068430190" }' ``` The most common first response to get in a request for data returns an `HTTP 202 FlinksCode:OPERATION_PENDING`, meaning that the data you are requesting is still being processed. Here's an example of a typical API response for data pending processing: ```json Json theme={null} { "FlinksCode": "OPERATION_PENDING", "Links": [...], "HttpStatusCode": 202, "Message": "Your operation is still processing", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` Because of this, your server needs to expect and be able to handle this response and proceed to poll the request (link to async poll code samples) to receive the data, which is described in the next step.

When sending requests for data...

Your integration must handle the 202 OPERATION\_PENDING response.
### Receive pending data For requests that are still pending for data processing, only the `requestId` is needed, but the parameter goes directly into the API URL as it's a `GET` request. While you receive the response `HTTP 202 FlinksCode:OPERATION_PENDING`, you need to keep calling this endpoint every 10 seconds for a maximum of 30 minutes. ```curl curl theme={null} curl -X GET \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/GetAccountsDetailAsync/1243c283-e0ca-4fda-a5e4-343068430190 \ -H 'Content-Type: application/json' ```

If you're still receiving 202 OPERATION PENDING...

In case your data is still pending, you need to call this endpoint every 10 seconds for maximum of 30 minutes. This doesn't mean that your request is going to take that long, but this global timeout is required to avoid infinite loops.
Once your data is done being processed, the API will respond with an `HTTP 200` and a JSON payload containing all the data we collected from the financial institution in a standard format. Your app server will be ready to start handling it according to your use-case. ```json Json theme={null} { "HttpStatusCode": 200, "Accounts": [ { "Transactions": [ { "Date": "2019-04-22", "Code": null, "Description": "national money", "Debit": 12.08, "Credit": null, "Balance": 49993.96, "Id": "633b976e-c713-4b59-9717-3ec407bdde8b" }, { "Date": "2019-04-21", "Code": null, "Description": "TrxChe@Cr12.07", "Debit": null, "Credit": 12.07, "Balance": 50006.04, "Id": "ac25ab22-2828-4174-9653-23bb8918b7c4" } ], "TransitNumber": "77777", "InstitutionNumber": "777", "OverdraftLimit": 0, "Title": "Chequing CAD", "AccountNumber": "1111000", "Balance": { "Available": null, "Current": 49993.96, "Limit": null }, "Category": "Operations", "Type": "Chequing", "Currency": "CAD", "Holder": { "Name": "John Doe", "Address": { "CivicAddress": "1275 avenue des Canadiens-de-Montréal", "City": "Montréal", "Province": "QC", "PostalCode": "H3B 5E8", "POBox": null, "Country": "CA" }, "Email": "johndoe@flinks.com", "PhoneNumber": "(514) 333-7777" }, "Id": "ae1dac72-70da-4626-fed8-08d682e1ff4a" }, {...} ], "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` ## Connect to our mandatory Flinks Connect endpoints When completing the authorization process for **both Flinks Connect and direct API connections**, you must pass a valid authorize token to access account data. This adds an extra layer of security by ensuring that only the intended person is accessing the account. Complete the steps below to pass us an authorize token each time you authenticate: ### Receive a secret key from Flinks Flinks provides a secret key during the integration process. This is a unique key that identifies you within the system and grants you access to our APIs. Use your secret key to generate an authorize token. This allows us to confirm your identity and ensure that the correct person is accessing the data. ### Generate an authorize token Call the [`/GenerateAuthorizeToken`](../../api/authorize/endpoints//generate-authorize-token) endpoint and pass your secret key. This token can only be used **once** and is active for **15 minutes**. This token expires if it is not used within 15 minutes, and you must generate a new one. ### Send us an authorize token to successfully authenticate Those using Flinks Connect will pass the authorize token using a [customization parameter](../connect/flinks-connect/widget). Add the [authorizeToken customization parameter](../connect/flinks-connect/widget#pass-an-authorize-token) to your Flinks Connect iframe URL, then pass your authorize token using the format `authorizeToken=123-456-789`. Replace `123-456-789` with your valid token. For example: ```url Url theme={null} https://yourinstance-iframe.private.fin.ag/?redirectUrl=flinks.com&authorizeToken=d65f1adb-8ebc-48dc-be8b-20c773ba1565 ``` ## Connect to your Attributes API endpoints So everything is nearly set up, you. only have a couple more API calls to make before you are fully ready to go to production! This section will guide you through the process of obtaining a new `requestId`, retrieving the most recent transactions at that time ([/GetAccountsDetail](/api/connect/endpoints/account-linking/get-accounts-detail)), and using that `requestId` to call the 'Attributes' service. ### Overview In order to take advantage of enhanced data, there are a couple of steps that need to happen. To pull back data attributes, Flinks needs to analyze the most recent transactional data for the end user and convert this into easily ingestible insights. Here is a step-by-step overview of this process: 1. Receive a new `requestId`. Using the loginId stored for the end user, call the [`/Authorize`](../../api/authorize/endpoints/authorize) endpoint with the parameter `MostRecentCached:true`. 2. Using the `requestId` that is generated from this new `/Authorize` call, make a call to the[`/GetAccountsDetail`](../../api/connect/endpoints/account-linking/get-accounts-detail)\` endpoint to retrieve the most recent transaction history. 3. Using this `requestId`, call the specific [`/Attributes`](../../api/enrich/endpoints/consumer-attributes/attributes) endpoint to retrieve the required data.

Note on steps 1 and 2

These have been covered previously in the Make API Calls section. Please refer to that for more information.
Assuming that you have the new session open and you have your end user's most recent transaction history, you're ready to call for Attributes. Within your integration, you have a choice of 5 endpoint variations. We have Four (4) Use-Case Specific Endpoints and one (1) Custom Endpoint for `Attributes`. Please find information on each of the Endpoints below. ### /GetIncomeAttributes This endpoint returns a set of `Income Verification` Attributes, and should be used by clients that have the Income Verification Use-Case Package. The Attributes contained within this request cannot be customized. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` ```curl curl theme={null} curl -X GET \ https://{instance}-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetIncomeAttributes \ ``` ### /GetCreditRiskAttributes This endpoint returns a set of `Credit Risk` Attributes and should be used by clients who have the Credit Risk Use-Case Package. The Attributes contained within this request cannot be customized. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` ```curl curl theme={null} curl -X GET \ https://{instance}-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetCreditRiskAttributes \ ``` ### /GetUserAnalysisAtributes The endpoint returns a set of User Analysis Attributes and should be used by clients that have the User Analysis Use-Case Package. The Attributes contained within this request cannot be customized. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` ```curl curl theme={null} curl -X GET \ https://{instance}-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetUserAnalysisAttributes \ ``` ### /GetLendingAttributes This endpoint returns a set of Lending Attributes and should be used by clients that have the `Lending` Use-Case Package. The Attributes contained within this request cannot be customized. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` ```curl curl theme={null} curl -X GET \ https://{instance}-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetLendingAttributes \ ``` ### /GetAllAttributes This endpoint returns all available Attributes that Flinks currently has available. This endpoint is restricted to only clients that have a Tier 2 package and above. The attributes contained within this request cannot be customized. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` ```curl curl theme={null} curl -X GET \ https://{instance}-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId}/GetAllAttributes \ ``` ### /Attributes This endpoint is the most customizable `Attributes` Endpoint. In order to call this Endpoint, you will need to know and include the names of Attributes within your request. This endpoint is used primarily by clients who have specific needs that fall outside of our Use-Case Endpoints. Required Parameters: * `instance` * `customerId` * `loginId` * `requestId` Required Fields: * `MostRecentCached` * `Attributes` You can also include these additional, optional fields (Please refer to our [API reference](../../api/enrich/endpoints) for further details):

Operations accounts only

Operations is the only supported value.
* `Filters` * `AccountFilter` * `Options` * `AttributesDetail`

Note on Attributes Field\*

If you are on a Tier 2 Package and need to create a custom Attribute request, please reach out to our team for the full list of Attribute Names that you can include here as needed for your custom use-case.
```curl curl theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/{customerId}/insight/login/{loginId}/attributes/{requestId} \ -H 'Content-Type: application/json' \ -d '{ "Attributes": { "Card": [ "account_age_days", "balance_current", "balance_max", "balance_min", "count_nsf", "avg_monthly_deposit", "sum_employer_income" ] }, "Filters": { "AccountCategory": [ "Operations" ] }, "Options": { "AttributesDetail": [ "count_nsf", "sum_employer_income" ], "AccountFilter": [ "472c349a-3aed-4358-3563-08d7ccf7c1f7" ] }, "MostRecentCached": true } ``` ```json Json theme={null} { "Card": { "Id": "347fafd7-0aa6-4e2f-90b6-08d7750bf480", "account_age_days": 195, "balance_current": -86200.82, "balance_max": -65148.62, "balance_min": -91212.27, "count_nsf": 0, "avg_monthly_deposit": 30322.74, "sum_employer_income": 48700.74, "AttributesDetail": [ { "Attribute": "sum_employer_income", "Transactions": [ { "TransactionId": "31ca0d0e-4ce5-4e49-82d3-9a5698d86a7b", "AccountId": "911807a7-72b6-431d-381a-08d792dc3bfc", "Date": "2020/02/13", "Description": "PAYROLL deposit - Flinks Technologies", "Debit": 0.0, "Credit": 9338.32 } ] } ] }, "Login": { "Username": "Attributes_1", "IsScheduledRefresh": false, "LastRefresh": "2020-03-12T16:54:51.7558369", "Type": "Personal", "Id": "347fafd7-0aa6-4e2f-90b6-08d7750bf480" }, "RequestId": "fb4f2c83-b4c0-43e4-82f5-844a3594a9cb" } ``` Once the `Attributes` engine is done processing the transactional data, the API will respond with a `HTTP 200` and a JSON payload containing all the requested data attributes (per the requested use-case) in a standard format; Your app server should be ready to start handling them according to your use-case. #### Before moving on, let's review what we just did: * Received a new `requestId` with incoming `loginId` by calling [/Authorize](../../api/authorize/endpoints/authorize) with `MostRecentCached:true.` * Requested ready-to-deliver data with [/GetAccountsDetail](../../api/connect/endpoints/account-linking/get-accounts-detail) and handled `202 OPERATION_PENDING` responses. * Set up the call to the required [/Attributes](../../api/enrich/endpoints/consumer-attributes/attributes) endpoint and started receiving data attributes. ## Connect to optional API endpoints to enhance your integration

Custom integrations only

This page explains how to set up custom integrations that use a direct API connection. If you are using Flinks Connect, see [`Set Up Flinks Connect`](../connect/getting-started#getting-started-with-connect).
Complete the following steps to connect with us using a custom API integration that uses OAuth 2.0: 1. Ask your Flinks Representative to whitelist the URLs that your endpoints will be calling, including the redirect URL in step 2A. 2. Call the [`/OAuth/Authorize`](../../api/authorize/custom/oauth-authorize) endpoint and perform the following tasks: * Redirect the end-user to their bank's login screen using the `institution` parameter. Here, they'll enter their login credentials and complete multi-factor authentication (MFA) if required. * Provide a URL to direct the end-users' screen back to your website or app using the `redirect_url` field. If the login is successful, you'll receive a redirect response that contains the redirect URL, a `loginId: https://{redirect}?loginId={loginId}&state={state}`. If unsuccessful, you'll receive a redirect response that contains a redirect URL and an error message: `https://{redirect}?state={state}&error={error}&error_description={error_description}`. For more information about how to make this call, see our [API documentation](../../api/authorize/custom). 3. Call the [`/Authorize`](../../api/authorize/endpoints/authorize) endpoint and apply the following settings to initiate the authorization flow: * Pass the `loginId` that you received in step 2. * Make the call in live mode by setting the `MostRecentCached` parameter to `FALSE`. For more information about how to make this call, see our [API documentation](../../api/authorize/endpoints/authorize). * Set the `save` parameter to `TRUE` to maintain communication with the database (to do nightly refreshes, receive insights, and more). For more information on how to make this call, see our [API documentation](../../api/authorize/endpoints/authorize). If you receive a 200 response, the end-user is successfully authenticated, and you can now use the Flinks API to retrieve data. ## Flinks enables your package To complete this step, ask your Flinks Representative to enable Attributes in your Flinks Connect configuration. ## Save your loginIds Flinks issues a unique `loginId` for each customer who authenticates through Flinks Connect, and you need it to fetch Attributes for that customer. Store it securely on your servers and **never share it publicly**. To delete a `loginId` and the associated data, use the [/DeleteCard](../../api/connect/endpoints/account-linking/delete-card) endpoint. Capture the `loginId` from the `REDIRECT` event or the redirect URL: see [A successful connection journey](/guides/connect/flinks-connect/use-event-listener#a-successful-connection-journey). For what the `loginId` is and how long it lasts, see [Key Concepts](/guides/getting-started/key-concepts#loginid). # Transaction Categorization Source: https://docs.flinks.com/guides/enrich/transaction-categorization Understand how Flinks categorizes transactions into primary and sub-categories for financial analysis. Flinks Broad Categorization assigns a **Category** and **SubCategory** to every transaction, providing structured financial insights from raw transaction data. ## How it works Flinks uses machine learning models to analyze transaction descriptions and classify them into standardized categories. This categorization is available for both Canadian and US transactions. To retrieve categories programmatically, use the [/Categories](/api/enrich/endpoints/attributes-libraries/categories) endpoint, which returns the full list of categories for a specific country. ## Primary categories Flinks organizes transactions into the following primary categories: | Category | Description | | :----------------- | :-------------------------------------------------- | | **Food & Dining** | Restaurants, groceries, food delivery | | **Health** | Medical, dental, pharmacy, fitness | | **Home** | Rent, mortgage, maintenance, furnishing | | **Income** | Salary, freelance, government benefits, refunds | | **Travel** | Flights, hotels, car rental, public transit | | **Utilities** | Electricity, gas, water, internet, phone | | **Insurance** | Health, auto, home, life insurance | | **Transfers** | Bank transfers, wire transfers, internal moves | | **Shopping** | Retail, clothing, electronics, online purchases | | **Entertainment** | Streaming, gaming, events, hobbies | | **Education** | Tuition, books, courses, student loans | | **Transportation** | Gas, parking, auto maintenance, rideshare | | **Financial** | Bank fees, interest, investment contributions | | **Personal** | Personal care, gifts, donations, subscriptions | | **Business** | Office supplies, professional services, advertising | | **Other** | Uncategorized or miscellaneous transactions | Each primary category contains multiple sub-categories for more granular classification. ## Using the API ### GetCategorization Use the [/GetCategorization](/api/enrich/endpoints/consumer-attributes/get-categorization) endpoint to retrieve categorized transactions for a connected account: ```bash theme={null} curl -X POST \ https://{instance}-api.private.fin.ag/v3/{customerId}/BankingServices/GetCategorization \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {API Secret}' \ -d '{ "RequestId": "{requestId}" }' ``` ### Upload/Categorization For external transaction data (not collected through Flinks Connect), use the [/Upload/Categorization](/api/upload/endpoints/document-processing/upload-categorization) endpoint: ```bash theme={null} curl -X POST \ https://{instance}-api.private.fin.ag/v3/{customerId}/Categorization/Upload \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {API Secret}' \ -d '{ "OriginCountry": "ca", "Transactions": [ { "TransactionDate": "2025-01-15", "Description": "UBER EATS", "Debit": "25.50", "Credit": null, "Balance": "1500.00" } ] }' ``` ### Example response ```json theme={null} { "HttpStatusCode": 200, "Transactions": [ { "Description": "UBER EATS", "Category": "Food & Dining", "SubCategory": "Food Delivery", "Debit": 25.50, "Credit": null, "Date": "2025-01-15" } ] } ``` ## Country-specific models Flinks maintains separate categorization models for Canada and the US. The `/Categories` endpoint accepts a `CountryCode` parameter (`CA` or `US`) to return the appropriate category list. The `/Upload/Categorization` endpoint currently supports US market transactions only. For Canadian transactions collected through Flinks Connect, use the standard `/GetCategorization` endpoint. # About Flinks Source: https://docs.flinks.com/guides/getting-started/about-flinks Learn what Flinks is, how it securely transfers financial data, and who our customers are. Flinks is the most efficient way to deal with financial information. Backed by the National Bank of Canada, a major Canadian financial institution, Flinks allows users to safely and reliably connect their banking data to the application or services of their choice. This quick and secure process eliminates the need for legacy processes such as micro-deposits, PDF documents, picture uploads, and even unsafe processes such as identification document sharing. ### Is Flinks safe and secure? Flinks is a very safe way to transfer financial information. You are sharing sensitive data that's only meant to be used by the application you are connecting to, so we keep it 256-bit encrypted at all times. Your bank account's login credentials are never displayed, viewed, or shared. We engage with the best security firms to routinely audit our processes, ensuring our security standards are always at the highest level. For instance, we've maintained a SOC 2 report for years. This is the gold standard for companies dealing with customer data, and it confirms the effectiveness of our security practices. For more details about our security certifications, data handling practices, and compliance, visit [flinks.com/security](https://www.flinks.com/security). ### Is my data private? Do I have control over it? It's your personal data, not ours, not anyone else's. You have control over it. No one can access your information without your knowledge and permission. It is encrypted using the highest industry standards, moved through secure channels, and stored on protected servers. You can request that we correct, update, or erase your personal information in our records. In other words, you can withdraw your consent whenever you want. You can request data deletion at [privacy@flinks.com](mailto:privacy@flinks.com). ## Who our customers are We support the following types of customers: | CUSTOMER | HOW CAN WE HELP | | :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Financial Institutions** | Flinks helps Financial Institutions by allowing you to safely connect a customer's account, unlock their access to other financial service providers, implement an open banking platform, and more. For more information, read about the [Flinks products that help Financial Institutions streamline their business needs](https://www.flinks.com/industry/financial-institution). | | **Lenders** | Flinks products help Lenders accelerate loan approvals, streamline repayment management, reduce the risk of fraud, and more. We can automate any manual processes and help you convert more customers, faster. For more information, read about the [products Flinks offers to help lenders.](https://www.flinks.com/industry/lending) | ## How it works Flinks helps digitize the collection of financial information so you can complete the onboarding faster, whether it be a loan application or signing up for a financial service of your choice. To do so, we've built secure digital channels to thousands of banks. These pipelines make it possible to quickly and safely transfer information. ### Working with Flinks Flinks can support financial institutions with the following use cases: | **FLINKS PRODUCTS** | **HOW IT CAN SUPPORT FINANCIAL INSTITUTIONS** | | :------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------- | | [Connect](../connect/getting-started) | Provide customers with connection to their external bank accounts. | | [Enrich](../enrich/enrich-your-data) | Have your customers gain access to data insights, digital onboarding, and smarter underwriting. | | [Pay](../pay/getting-started) | Boost your conversions by enabling customers to open accounts and access funds in minutes. | | Outbound | Allow you customers to view, manage, and revoke their consent to applications they've chosen to share their financial data with. | | [Upload](../upload/flinks-upload) | Processes, authenticate and extract data from customer bank statements. | # Flinks Products Source: https://docs.flinks.com/guides/getting-started/flinks-products Explore the full suite of Flinks products including Connect, Attributes, Pay, Outbound, and Upload. | **PRODUCT NAME** | **AREA** | **DESCRIPTION** | | :------------------- | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Flinks Connect** | Connect | Flinks Connect is our most popular front-end solution for Connect. It live in an iframe on your site and allows your customers to connect their financial accounts to securely share data. It requires in-house development resources to set up, but we handle all complicated bank processes on your behalf (such as multi-factor authentication, and more). | | **Flinks Express** | Connect | Flinks Express is the fastest way to integrate with us to connect end-user accounts. It's a hosted solution that you can customize with your corporate branding and is ideal for clients who do not have any in-house development resources. | | **Attributes** | Enrich | Attributes is an Enrich product that allows you to receive specific data insights based on your individual use case. We'll send you specific data attributes so that you can get a better understanding of your customer's behaviour. | | **Flinks Pay** | Pay | Flinks Pay is a payment processing service that allows your customers to transfer funds using Interac E-Transfer or EFT Debit. | | **Outbound** | Outbound | Outbound is our open banking product. It's a direct, oAuth-supported API connection that allows your customers to securely connect and share their financial data. When you use Outbound, you also gain access to a network of Data Recipients who your customers can securely connect with. | | **Upload** | Upload | Upload is a product that you can enable in Flinks Connect and Flinks Dashboard. Use it to securely upload your documents, then we'll process it and extract the data. We'll also flag it if any of your documents are fraudulent or appear suspicious. | | **Flinks Dashboard** | Connect, Enrich, Pay, Outbound | Flinks Dashboard is a user-interface that provides access to a collection of features to help you effectively manage your financial insights. | ## Flinks Connect ##### Use this solution if: You want to build the solution directly into your site or app, and have in-house development resources available to assist. Flinks Connect is our most popular solution to connect end-user accounts. It supports oAuth technology and lives in an iframe that you build into your site. We handle all of the complicated bank processes on your behalf, including multi-factor authentication, edge cases, errors, and more. Any new financial institutions that we support are automatically added to your configuration. Your customers can be confident that the data they're sharing is safe. Their login credentials are securely stored and are never shared to your servers. For more information about this Flinks Product, see [Flinks Connect](../connect/flinks-connect/flinks-connect). ## Attributes ##### Use this solution if: You want to receive actionable insights that are tailored to your business needs. Attributes is a Flinks product that allows you to transform raw transactional data into real-time, actionable insights using data attributes. Each attribute reveals specific information about your customer's financial profile and consumer behaviour. Put simply, data attributes are outputs of organized and transformed transactional data. You'll receive enriched data, through attributes, to gain a better understanding of your clients' behaviour without having to deal with categorization, cleaning, or any of the tedious tasks that are typically required when working with raw data. Flinks offers several attributes packages that you can choose from. We structure these packages in tiers, based on the data you want to receive. For more information about this Flinks product, see [Attributes](../enrich/attributes). ## Flinks Pay ##### Use this solution if: You want a seamless way to transfer funds using EFT Debit or Interac E-Transfer. Flinks Pay is a payment processing service that allows your customers to transfer funds to you using Interac e-Transfer Request Money. It provides a seamless transaction process for both you as a business and for your customers. Flinks Pay allows your customers to make payments from almost any bank account in Canada, with funds guaranteed almost immediately. For more information about this Flinks product, see [Flinks Pay](../pay/getting-started). ## Outbound ##### Use this solution if: You want to build an open banking solution using a direct API connection and oAuth 2.0. Outbound is the Flinks open banking product. It allows you to connect end-user accounts using open banking: a standardized and secure framework. Outbound enables your customers to safely share their financial data to a network of third-party applications, while keeping your financial institution at the centre of the experience. ## Upload ##### Use this solution if: You want to onboard more users by offering to upload bank statements in addition to standard bank linking. Upload is a document processing and authentication is a feature that you can enable in Flinks Connect and in your Flinks Dashboard to process authenticate and extract data from bank statements. If you’re already using Flinks, you’ll get the data in the same format you're already using to receive data, whether that's through the Flinks Dashboard or by API. Here's what your customers will see: Gif showing a user uploading bank statements in Flinks Connect. For more information about this Flinks product, see [Upload](../upload/flinks-upload). ## Flinks Express ##### Use this solution if: You want a fast integration that does not require in-house development resources. Flinks Express is the fastest way to integrate with us to connect end-user accounts. It's a hosted solution that we manage on your behalf, but design it to look like your website. It's a template that we fully customize with your branding and logos. We recommend this integration option if you don't have any in-house development resources or do not want to build it into your site. For more information about this Flinks product, see [Flinks Express](../connect/flinks-express). ## Flinks Dashboard ##### Use this solution if: You want a dashboard to view and manage your data. On the Flinks Dashboard, you can access a collection of features to help you effectively manage your financial insights, including: * Get access to sample data to try out our new open banking API. * Receive pre-configured reports and analytics. * Send and request money. * Configure and generate your Flinks-powered end-users interface. # Instances and Data Residency Source: https://docs.flinks.com/guides/getting-started/instances How Flinks instances are provisioned per country to keep end-user data within its country of origin. A **Flinks instance** is the deployment that serves your integration. Each instance has its own credentials, API base URL, iframe URL, and `customerId`, and it is hosted in a specific country. ## One instance per country Each instance is hosted in the country whose users it serves, so end-user banking data never leaves its country of origin. A single instance covers **either** Canadian users **or** U.S. users, not both. This applies across **all Flinks products** (Connect, Enrich, Pay, Outbound, Upload). If you onboard customers in both Canada and the United States, Flinks provisions **two separate instances**, each with its own: Each instance is named with a country suffix (`-ca` or `-us`) so the hostname makes it clear which region it serves: | Component | Canadian instance | U.S. instance | | :---------------------- | :--------------------------------------- | :--------------------------------------- | | `customerId` | Unique GUID | Unique GUID (different) | | API base URL | `{yourcompany}-ca-api.private.fin.ag` | `{yourcompany}-us-api.private.fin.ag` | | Iframe base URL | `{yourcompany}-ca-iframe.private.fin.ag` | `{yourcompany}-us-iframe.private.fin.ag` | | Secret key, `x-api-key` | Unique to the Canadian instance | Unique to the U.S. instance | Route each request, both API calls and Flinks Connect iframe loads, to the instance that matches the end-user's country. `loginId`s are scoped to the instance that issued them. A `loginId` created on the Canadian instance is not valid on the U.S. instance, and vice versa. Data is not shared between instances. ## Choosing the right instance Determine the end-user's country **before** opening Flinks Connect or calling `/Authorize`, then route all downstream requests (`/GetAccountsDetail`, `/GetStatements`, webhook subscriptions, Attributes, Pay, Outbound, etc.) to the matching instance. If your application supports both countries: * Maintain separate credentials and base URLs for each instance in your configuration. * Store each customer's `loginId` alongside the country/instance it was issued on, so subsequent sessions use the right instance. * Configure webhook URLs on each instance independently: webhooks are delivered from the instance that generated the event. ## Sandbox is its own instance The Toolbox sandbox (`toolbox-api.private.fin.ag`) is a separate instance from any production instance. `loginId`s created in the Toolbox are not valid in production, and vice versa. For Toolbox credentials and test users, see [Testing Environments](./testing-environments). # Key Concepts Source: https://docs.flinks.com/guides/getting-started/key-concepts Understand the core concepts of the Flinks API: LoginId, RequestId, caching, and transaction types. ## LoginId vs RequestId Flinks uses two key identifiers to manage account connections and data retrieval sessions. ### LoginId A `loginId` is a **permanent token** issued when a customer successfully authenticates through Flinks Connect. It represents the saved connection to a specific financial institution account. | Property | Detail | | :-------------- | :---------------------------------------------------------------------------------------------------------- | | **Lifetime** | Permanent, does not expire until you call [/DeleteCard](/api/connect/endpoints/account-linking/delete-card) | | **Uniqueness** | Tied to a specific institution, username, and language | | **Persistence** | Remains the same even if the customer's banking password changes | | **Scope** | Unique per instance (e.g., sandbox vs. production) | | **Storage** | Store securely on your servers, never expose publicly | The `loginId` stores the customer's credentials, KYC data, and linked accounts. Flinks retains this data indefinitely unless you explicitly delete it with `/DeleteCard`. ### RequestId A `requestId` is a **session token** generated each time you call the [/Authorize](/api/authorize/endpoints/authorize) endpoint with a `loginId`. | Property | Detail | | :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | | **Lifetime** | Ends on timeout (8 minutes of inactivity during authorization, or 30 minutes during data processing) or when a completing call consumes it | | **Completing calls** | `/GetAccountsDetail`, `/GetAccountsDetailAsync`, and `/GetStatements` complete the session and consume the `requestId` | | **Reusable calls** | `/GetAccountsSummary` and the Attributes endpoints do not complete the session, so one `requestId` can call multiple Attributes packages | | **Purpose** | Grants access to data endpoints like `/GetAccountsDetail` and `/GetStatements` | A `requestId` ends in one of two ways: the session times out, or a completing call (`/GetAccountsDetail`, `/GetAccountsDetailAsync`, or `/GetStatements`) consumes it. After either, call `/Authorize` again for a new `requestId`. In cached mode (`MostRecentCached: true`), a cached `requestId` is not consumed by cached `/GetAccountsDetail`, so you can reuse it for cached GAD and multiple Attributes calls. ### Typical flow ```mermaid theme={null} flowchart LR A["loginId
(permanent)"] -->|"/Authorize"| B["requestId
(session)"] B -->|"/GetAccountsDetail"| C["Financial Data"] ``` ## Instances A Flinks instance is regionally scoped: each instance is hosted in a specific country (Canada or the U.S.) and serves only that country's end-users. If you onboard customers in both countries, you'll be provisioned with two separate instances, one per country, each with its own credentials, base URLs, and `customerId`. For full details, see [Instances and Data Residency](./instances). ## Cached mode When calling the `/Authorize` endpoint, use `MostRecentCached: true` to retrieve the most recently processed data without initiating a new live connection to the financial institution. **When to use cached mode:** * Retrieving data that was already collected (e.g., for Attributes processing) * Opening a session to access stored data without requiring the customer to re-authenticate * Daily refresh routines where Nightly Refresh has already collected fresh data **When NOT to use cached mode:** * When you need a fresh, live connection to the financial institution * When performing a manual refresh (use `MostRecentCached: false` with `Save: true`) ## Post vs Pending transactions The Flinks API returns **posted transactions only**: transactions that have been fully processed by the financial institution. Pending transactions (transactions that have been initiated but not yet settled) are not included in the API response. However, the **Available Balance** on an account may reflect pending transactions, which is why it can differ from the **Current Balance**. ## Data retention Flinks retains all data associated with a `loginId` indefinitely. If you need to delete a customer's data: 1. Call the [/DeleteCard](/api/connect/endpoints/account-linking/delete-card) endpoint with the `loginId`. 2. This permanently removes all stored credentials, KYC information, and account data. 3. The `loginId` becomes invalid and cannot be reused. # Testing Environments Source: https://docs.flinks.com/guides/getting-started/testing-environments Understand the three levels of testing available at Flinks: Sandbox, Toolbox, and Production. Flinks provides multiple testing environments so you can develop, test, and validate your integration before going live. ## Testing levels | Environment | Purpose | Real FI connections | Credentials | | :---------------------- | :--------------------------------------------------- | :------------------ | :----------------------------------------- | | **Sandbox** (Dashboard) | Explore the Dashboard with sample data | No | Found in Dashboard Settings > Environments | | **Toolbox** | Full API sandbox with dummy data from Flinks Capital | No | Shared public credentials (below) | | **Production** | Live environment with real financial institutions | Yes | Unique credentials from Flinks | ## Toolbox (API sandbox) The Toolbox is your primary development environment for testing API calls. It uses a shared sandbox instance with a dummy financial institution called **Flinks Capital**. ### Toolbox credentials | Credential | Value | | :-------------------------------------------------------------- | :-------------------------------------- | | Instance | `toolbox` | | API Base URL | `https://toolbox-api.private.fin.ag` | | Iframe Base URL | `https://toolbox-iframe.private.fin.ag` | | customerId | `43387ca6-0391-4c82-857d-70d95f087ecb` | | Secret key (for `flinks-auth-key` on `/GenerateAuthorizeToken`) | `c4569c54-e167-4d34-8de6-f4113bc82414` | | x-api-key (for data endpoints) | `3d5266a8-b697-48d4-8de6-52e2e2662acc` | ### Test user credentials Use these credentials to log in to Flinks Capital in the Toolbox: | Username | Password | Description | | :--------------- | :--------- | :----------------------------- | | `Greatday` | `Everyday` | Standard test account with MFA | | `greatday_nomfa` | `Everyday` | Test account without MFA | For a full list of test scenarios (error testing, edge cases), see [Test Users](/guides/connect/flinks-connect/test-users). These are shared public sandbox credentials for testing only. Never use production credentials in the Toolbox or vice versa. ## Dashboard sandbox The Flinks Dashboard includes its own sandbox environment with pre-populated sample data. This is useful for exploring the Dashboard interface without needing to make API calls. To access sandbox credentials in the Dashboard: 1. Navigate to **Settings**. 2. Go to the **Environments** tab. 3. Expand the **Sandbox** row to view your credentials. Dashboard sandbox credentials are for exploring the Dashboard only. They will not work in API calls. Use the Toolbox credentials above for API testing. ## Production environment Your production environment uses a private instance with unique credentials provided by Flinks during onboarding. | Component | Format | | :-------------- | :-------------------------------------------- | | API Base URL | `https://{yourcompany}-api.private.fin.ag` | | Iframe Base URL | `https://{yourcompany}-iframe.private.fin.ag` | | customerId | Unique GUID provided by Flinks | Before going live: * Ensure all API calls and iframe URLs point to your production instance * Verify your `redirectUrl` domains are whitelisted * Test with Flinks Capital in production at no cost before connecting real accounts Flinks instances are scoped by country: a single instance serves either Canadian or U.S. end-users, not both. If you onboard customers in both countries, you'll be provisioned with two separate instances. See [Instances and Data Residency](./instances) for details. ## FDX end-to-end testing If you are using the Flinks Outbound (Open Banking) product with FDX endpoints, follow this procedure to test the full flow: 1. **Prerequisites**: Ensure you have your `client_id` and `client_secret` from Flinks onboarding. 2. **Authorize**: Call the `/api/v1/authorize` endpoint to initiate an OAuth connection with a test Data Provider. 3. **Token exchange**: Use the authorization code to obtain an `access_token` via the `/Token` endpoint. 4. **Retrieve data**: Call FDX endpoints (`/accounts`, `/transactions`) with the `access_token`. For details on each endpoint, see the [Outbound API Reference](/api/outbound/getting-started). # Walkthrough Videos Source: https://docs.flinks.com/guides/getting-started/walkthrough-videos A complete video guide to integrating with Flinks and making the most of our products This page includes a complete set of onboarding videos designed to guide you through integrating with Flinks, step by step. Whether you're just getting started or looking to deepen your understanding, these videos walk through key concepts, workflows, and best practices to help you get the most out of our products. *** ### 1. Welcome to Flinks Welcome to Flinks. In this video, we introduce Flinks as an [embedded finance platform](/guides/getting-started/about-flinks) and walk you through what to expect from your onboarding and integration journey. You'll get a high-level overview of our [products](/guides/getting-started/flinks-products), how they work together, and the key steps to successfully launch and scale with Flinks. *** ### 2. Choosing your front-end integration In this video, we walk through your [front-end integration options](/guides/connect/choose-a-frontend-solution) with Flinks: [Flinks Connect](/guides/connect/flinks-connect/widget) and Flinks Express. You'll learn how each option works, when to use them, and how to choose between a customizable in-app experience or a faster, no-code setup to get your users connected. *** ### 3. Choosing your back-end integration In this video, we walk through your [back-end integration options](/guides/connect/choose-a-backend-solution) with Flinks, including the [Customer Dashboard](/guides/dashboard/getting-started), [API requests](/api/authorize/getting-started), and [webhooks](/guides/webhooks/introduction). You'll see how to access connected data, explore enriched insights and Upload results, and understand how each method fits different use cases depending on your level of automation and control. *** ### 4. Using the Flinks API and webhooks In this video, we walk through how to use the [Flinks API](/api/authorize/getting-started) and [webhooks](/guides/webhooks/introduction) to retrieve and manage financial data after a user connects. You'll learn the standard API flow step by step, how to handle async responses with the [/Authorize endpoint](/api/authorize/endpoints/authorize), and when to use webhooks for a more automated, event-driven setup. *** ### 5. Flinks Enrich Walkthrough In this video, we walk through [Flinks Enrich](/guides/enrich) and how it transforms raw transaction data into structured financial insights. You'll learn how to retrieve attributes through the API, explore categorization, and use enriched data to support decisioning, risk analysis, and financial workflows. *** ### 6. Exploring Flinks Enrich attributes in the Customer Dashboard In this video, we explore how [Flinks Enrich](/guides/enrich) appears in the [Customer Dashboard](/guides/dashboard/tools) and how to navigate enriched financial data visually. You'll learn how to review different attribute packages, understand key financial signals, and use the dashboard to quickly assess an end user's financial health. *** ### 7. Flinks Upload Walkthrough In this video, we walk through [Flinks Upload](/guides/upload) and how to use it to collect and process financial data through document uploads. You'll learn when to use Upload, how it works across the front end, API, and Customer Dashboard, and how to leverage [fraud signals](/api/upload/endpoints/fraud/fraud-analysis) and verdicts for smarter, automated decisioning. *** ### 8. You're live with Flinks In this video, we walk through what to do after going live with Flinks, including how to monitor [platform status](https://status.flinks.com/), [report issues](https://help.flinks.com/support/tickets/new) efficiently, and understand your billing. You'll learn where to find key resources and how to manage your integration with confidence. *** ## Useful Links * [Submit a support ticket](https://help.flinks.com/support/tickets/new) * [Flinks status page](https://status.flinks.com/) * [How Flinks keeps end-user data safe](https://www.flinks.com/data-safety) * [Flinks Connect documentation](/guides/connect/flinks-connect/widget) * [Event listener guide](/guides/connect/flinks-connect/use-event-listener#use-an-event-listener) * [Customer Dashboard guide](/guides/dashboard/getting-started) * [API getting started guide](/api/authorize/getting-started) * [How to use the /Authorize endpoint](/api/authorize/endpoints/authorize) * [How to use webhooks](/guides/webhooks/introduction) * [Flinks Enrich overview](/guides/enrich) * [Flinks Upload guide](/guides/upload) * [Fraud analysis endpoint](/api/upload/endpoints/fraud/fraud-analysis) # Outbound (Open Banking) Source: https://docs.flinks.com/guides/outbound-overview Learn about Flinks Outbound, the Open Banking solution for secure, consent-based financial data sharing. Flinks Outbound is an Open Banking solution that enables secure, consent-based financial data sharing between financial institutions and third-party applications. It uses industry standards like **Financial Data Exchange (FDX)** to ensure consistent, high-quality data delivery. ## What is Open Banking? Open Banking is a framework that allows consumers to securely share their financial data with third-party service providers. Instead of screen-scraping or credential-based access, Open Banking uses standardized APIs and explicit user consent to share data directly from the financial institution. ## How Flinks Outbound works At a high level, the Outbound flow works as follows: 1. **Your application** initiates an authorization request with a Data Provider (financial institution) 2. **The user** is redirected to their financial institution's consent page 3. **The user** reviews and approves the data-sharing request 4. **The financial institution** issues an authorization code 5. **Your application** exchanges the code for an access token 6. **Your application** uses the access token to retrieve financial data through FDX-compliant endpoints This is an **OAuth-based consent flow**: the user's credentials are never shared with your application. They authenticate directly with their financial institution. ## Key concepts ### Roles | Role | Description | | :----------------- | :----------------------------------------------------------------------------------------------------------------- | | **Data Provider** | A financial institution (bank, credit union) that holds the customer's financial data and provides it through APIs | | **Data Recipient** | An organization that receives financial data from Data Providers to deliver services to the customer | | **Partner** | A Data Recipient that is fully integrated into the Flinks Outbound ecosystem | ### FDX-compliant output Flinks Outbound returns data in **FDX (Financial Data Exchange)** format, an industry-standard JSON structure for financial data. This includes: * Account details (type, balance, account number) * Transaction history * Customer information (name, contact details) * Payment network information Using a standard format means you can integrate with multiple Data Providers without custom parsing for each one. ## When to use Outbound vs Connect | Criteria | Outbound (Open Banking) | Connect (Screen-based) | | :----------------------- | :--------------------------------------------- | :---------------------------------------- | | **Data access method** | Direct API from financial institution | Credential-based extraction | | **User consent** | OAuth consent at the financial institution | User enters credentials in Flinks Connect | | **Credential handling** | Credentials never leave the bank | Credentials securely stored by Flinks | | **Institution coverage** | Growing: depends on Data Provider availability | Broad: supports hundreds of institutions | | **Data freshness** | Real-time via API | Near real-time with nightly refresh | | **Best for** | Institutions that support Open Banking APIs | Broad institution coverage, legacy banks | Outbound and Connect can be used together. Use Outbound for institutions that support Open Banking, and fall back to Connect for institutions that don't yet have Open Banking APIs. ## Getting started 1. **Receive client credentials** from Flinks during onboarding (`client_id` and `client_secret`) 2. **Register with Data Providers** whose customers you want to serve 3. **Implement the OAuth authorization flow** to obtain user consent 4. **Call FDX endpoints** to retrieve financial data For step-by-step instructions, see the [Outbound API Getting Started](/api/outbound/getting-started) guide. ## Related resources * [Outbound API Reference](/api/outbound/endpoints) * [FDX Endpoints](/api/outbound/endpoints/fdx/index) * [Authorization Endpoints](/api/outbound/endpoints/authorize/index) # Getting Started with E-Transfer Source: https://docs.flinks.com/guides/pay/e-transfer/e-transfer Learn how Flinks Pay processes one-time payments using Interac E-Transfer Request for Money. When you use Interac E-Transfer RFM as your payment method, FlinksPay sends a one-time e-transfer request to your customer via Interac. Choose this payment method if you need to make quick, one-time payments. ## How it works At a high level, this is how the process works when you initiate e-Transfer with FlinksPay as your customer's payment method: 1. The customer is asked to confirm their transfer. From there, they're redirected to the FlinksPay application when asked to select their bank. Screenshot of the Flinks Connect UI. The user is asked to select their bank to complete a payment. 2. We initiate an Interac money transfer request to the customer's bank. We provide information about the transaction, including the payee, transaction amount, reference number, and more. 3. The customer is asked to perform the following actions: * Enter their login credentials to authenticate with their bank. Screenshot of the Flinks Connect UI. The user is asked to authenticate using their login credentials for the dummy institution, Flinks Capital. * In some cases, they may be asked to complete multi-factor authentication (MFA). * Accept the money transfer request once they're logged in. Screenshot of a money transfer request in FlinksPay. * The customer's bank notifies Flinks that the customer has accepted the request, then debits the from the customer's account. * The customer's bank displays a confirmation message stating that the transaction is complete. Screenshot of the completion screen for an e-transfer using Flinks Pay. * You can now redirect the customer back to your site (or close the application). Screenshot of the Flinks Pay UI. A user makes a successful payment using Interac e-Transfer. 4. At the end of each day, we consolidate all of your payments and send it, using an electronic funds transfer (EFT), to the account that you have with your financial institution. 5. We complete a comprehensive reconciliation of all transactions and investigate any discrepancies. 6. We email you an end-of-day (EOD) report that contains your consolidated daily payments. The report contains the following information about each payment: * referenceId to identify the transaction * Transaction amount * Customer name * Customer email address * Date that the Interac e-transfer money request was created on * Date that the transaction was completed on The information available in your EOD Report is also available in your Flinks Dashboard. ## Set up Flinks Pay using E-Transfer as your payment method FlinksPay is a payment processing service that allows your customers to transfer funds to you using Interac e-Transfer Request Money. Complete the following steps to set up FlinksPay using e-transfer as the payment type: 1. The FlinksPay application is hosted using a direct URL that requires an active session to initiate the payment request. Determine where you want to embed the FlinksPay application: * Directly on your website, initiating when a customer is making a purchase. * Within a pre-existing messaging system that you've already deployed on your website. * By sending an email to a user that contains a link to the app (requires no integration on your end). * To discuss an option that's not listed above, contact your Flinks Representative. 2. We will walk you through our standard onboarding and verification process, which typically takes 1-2 weeks. After this is complete, we will provide you with a unique `instance` and `credentials` that you can use to start making transactions. 3. Start running tests and working on your integration using our Sandbox environment. 4. Provide us with a high-quality image of your company logo and let us know about any additional customizations you want to make. To discuss customization options, contact your Flinks Representative. 5. To start making transactions, follow the instructions below: * Validate your identity and initiate the process by calling the [`/Authorize`](../../../api/pay/endpoints/authorize/authorize) endpoint. You'll receive an `access_token` if the request is successful. * Pass the `access_token`, credentials, and instance to initiate a session with the application. If it's successful, you'll receive a `sessionId`. * Use the `sessionId` to finalize and activate the Payment Request and receive a `requestId`. * Use the `sessionId` to launch the Flinks Pay application by appending it to the base application's URL. ## Make a payment To start making transactions, follow the instructions below: 1. Validate your identity and initiate the process by calling the [`/Authorize`](../../../api/pay/endpoints/authorize/authorize) endpoint. You'll receive an `access_token` if the request is successful. 2. Pass the `access_token`, `credentials`, and `instance` to initiate a session with the application. If it's successful, you'll receive a `sessionId`. 3. Use the `sessionId` to finalize and activate the Payment Request and receive a `requestId`. 4. Use the `sessionId` to launch the Flinks Pay application by appending it to the base application's URL. ## Reconcile your payments Reconcile and review the status of your payments using one (or both) of the following methods: * Review the daily reconciliation files that we provide in your Payments Dashboard. You can also receive these files automatically by email. Please reach out to your Flinks Representative for more information. * Use the following API endpoints to review customer activity and payment information: * [`/Authorize`](../../../api/pay/endpoints/authorize/authorize) * [`/PaymentRequests`](../../../api/pay/endpoints/e-transfer/get-payment-requests) # Set Up Flinks Pay Using E-Transfer as Your Payment Method Source: https://docs.flinks.com/guides/pay/e-transfer/setup-flinks-pay Configure Flinks Pay with Interac e-Transfer from onboarding to production transactions. Flinks Pay is a payment processing service that allows your customers to transfer funds to you using Interac e-Transfer Request Money. Complete the following steps to set up Flinks Pay using e-transfer as the payment type: 1. Complete steps 1-3 of Set Up Flinks Pay. 2. The Flinks Pay application is hosted using a direct URL that requires an active session to initiate the payment request. Determine where you want to embed the Flinks Pay application: * Directly on your website, initiating when a customer is making a purchase * Within a pre-existing messaging system that you've already deployed on your website * By sending an email to a user that contains a link to the app (requires no integration on your end) * To discuss an option that's not listed above, contact your Flinks Representative 3. We will walk you through our standard onboarding and verification process, which typically takes 1-2 weeks. After this is complete, we will provide you with a unique `instance` and `credentials` that you can use to start making transactions. 4. Start running tests and working on your integration using our Sandbox environment. 5. Provide us with a high-quality image of your company logo and let us know about any additional customizations you want to make. To discuss customization options, contact your Flinks Representative. 6. To start making transactions, follow the instructions below: * Validate your identity and initiate the process by calling the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint. You'll receive an `access_token` if the request is successful. * Pass the `access_token`, `credentials`, and `instance` to initiate a session with the application. If it's successful, you'll receive a `sessionId`. * Use the `sessionId` to finalize and activate the Payment Request and receive a `requestId`. * Use the `sessionId` to launch the Flinks Pay application by appending it to the base application's URL. 7. Go to production. # Getting Started with EFT Source: https://docs.flinks.com/guides/pay/eft/eft-debit Learn how Flinks Pay uses EFT to collect or send funds via Pre-Authorized Debit transactions. **Work in progress** This section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities. If you're interested in early access or want to learn more about what's coming, feel free to [reach out to the team](/guides/support/contact-flinks). When you use EFT (Electronic Funds Transfer) as your payment method, Flinks Pay collects or sends money using Pre-Authorized Debit (PAD) transactions through Canada's EFT rail. Choose this payment method if: * You need to collect recurring payments from customers on a set schedule. * You want to initiate one-time debits or credits to customer bank accounts. * You want to transfer large sums of money via the EFT network. ## What is EFT? EFT allows you to initiate debit or credit transactions against a customer's bank account. Each transaction is backed by a Pre-Authorized Debit (PAD) agreement completed by the customer during the payment flow. * **Debit (PAD)**: Withdraw funds from a customer's account into your account. Supports one-time and recurring schedules. * **Credit**: Send funds from your account to a customer's account. One-time, same-day only. ## Key Features ### Payment Directions | Direction | Use Case | Scheduling | | ---------- | ------------------------------- | ------------------------------------------------- | | **DEBIT** | Collect payments from customers | One-time or recurring (Weekly, Biweekly, Monthly) | | **CREDIT** | Send funds to customers | One-time, same-day only | ### Recurring Schedules For debit transactions, you can set up recurring payment schedules with the following frequencies: * **OneTime**: A single debit on a specified future date * **Weekly**: Every week starting from the start date * **Biweekly**: Every two weeks starting from the start date * **Monthly**: Every month starting from the start date Recurring schedules require either an end date or a maximum transaction count (up to 300). ### PAD Requirement Before a debit can be processed, Flinks must have a valid Pre-Authorized Debit (PAD) agreement completed by the customer. During onboarding, you work with Flinks to customize the PAD agreement terms presented to your customers. ## EFT Processing Windows Flinks follows Payments Canada EFT processing windows: | Window | Cutoff Time | Submission Time | Days | | -------- | ----------- | --------------- | ---------- | | Window 1 | 2:30am EDT | 9:30am EDT | Mon to Fri | | Window 2 | 1:30pm EDT | 4:30pm EDT | Mon to Fri | | Window 3 | 6:00pm EDT | 9:00pm EDT | Mon to Fri | No processing occurs on weekends or statutory holidays. Payments created before a cutoff are submitted in the next window. ## EFT Status Lifecycle Each EFT transaction progresses through the following statuses: | Status | Description | | ------------ | ----------------------------------------------- | | `Received` | Transaction request received by Flinks | | `Created` | Transaction created and queued for processing | | `Submitted` | Submitted to Payments Canada | | `Reconciled` | Confirmation received from the payment network | | `Settled` | Funds have settled | | `Cancelled` | Transaction was cancelled before submission | | `Rejected` | Transaction was rejected by the payment network | ## Integration Flow A typical EFT integration follows these steps: 1. **Authenticate**: Obtain an API key from Flinks during onboarding. 2. **Create a transaction**: Call `POST /api/v1/transactions` with payment details and schedule. 3. **Manage schedules**: Cancel upcoming payments with the schedule or payment request cancellation endpoints. ## Getting Started To implement EFT in your application: 1. **[Setup Guide](/guides/pay/eft/setup-flinks-pay)**: Complete setup and implementation walkthrough 2. **[API Documentation](/api/pay/endpoints/eft/index)**: Technical API reference and endpoints ## Requirements Before starting your EFT integration: * **Onboarding**: Complete the standard Flinks onboarding and verification process * **PAD Agreement**: Review and customize your Pre-Authorized Debit agreement with Flinks * **Sandbox Access**: Use the sandbox environment (`payments-uat.flinksapp.com`) for testing * **API Credentials**: Flinks provisions your API key (`x-client-id`) during onboarding Contact your Flinks representative to begin the onboarding process for EFT. # EFT Failure Scenarios Source: https://docs.flinks.com/guides/pay/eft/failure-scenarios Operational playbook for every Payments Canada EFT return code: what caused it, the impact, and what to do next. When an EFT transaction is rejected, the receiving financial institution sends back a Payments Canada return code (CPA005 standard, plus Rule H1 codes for PAD disputes). This guide maps every return code you might see to a clear operational decision: cancel the schedule, contact the user and create a new transaction, review before acting, or escalate. Codes and procedures here follow [Payments Canada Standard 007](https://www.payments.ca/sites/default/files/standard007eng.pdf) and [Rule H1](https://www.payments.ca/sites/default/files/h1eng.pdf). **PAD disputes are time-sensitive.** Any return code flagged as a **PAD Dispute** triggers an automatic recall of funds while the dispute is under review. ## Decision framework Every return code maps to one of four decisions. Use the decision to drive your workflow before reading the code-specific guidance. | Decision | When it applies | Schedule action | | ---------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | **Cancel Schedule** | Permanent account issue. Retrying will produce the same result. | Stop all payments to this account. | | **Contact User / New Transaction** | Recoverable, temporary failure. Account is valid. | Keep schedule. Cancel the failed transaction. Create a new one once the user confirms funds are available. | | **Review Before Acting** | Intent is unclear. Outcome depends on what the user tells you. | Hold further action. Speak to the user. Cancel the schedule or continue based on their response. | | **Investigate / Escalate** | Technical or systemic issue. Not a customer problem. | Keep the schedule. Fix the technical issue. Do not involve the user. | ## Decision matrix Quick lookup by code: | Decision | Codes | | ------------------------------ | --------------------------------------------------------------- | | Cancel Schedule | 902, 905, 907, 909, 910, 911, 912, 915, 917, 920 | | Contact User / New Transaction | 901, 908 | | Review Before Acting | 903, 914, 916, 918, 919, 921 | | Investigate / Escalate | 900, 904, 922, 990 | | PAD Dispute (Rule H1) | 902, 905, 907, 909, 911, 912, 915, 916, 917, 918, 919, 920, 921 | ## File validation **Decision:** Investigate / Escalate The EFT file failed Payments Canada format validation before any transaction was processed. | | | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Invalid institution or transit numbers, incorrect account number format, or missing mandatory fields. | | **Impact** | No funds were debited. Rejected at file level before reaching the receiving institution. | | **What you do next** | Do not contact the user. Inspect the `statusDetails` on the transaction for the specific validation error. Contact Flinks support with the transaction details. Cancel the failed transaction and create a new one with the corrected details. Do not modify the original transaction. | | **Schedule action** | Keep schedule. Cancel the failed transaction. Create a new transaction with corrected details. | ## Administrative returns **Decision:** Contact User / New Transaction The user's account did not have enough cleared funds at processing time. This is the most common return code. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **What caused this** | Insufficient cleared funds at presentation time. The account is valid and debitable. | | **Impact** | No funds collected this cycle. The failed transaction cannot be retried or modified in Flinks. A new transaction must be created once the user confirms funds are available. | | **What you do next** | Contact the user promptly. Explain the payment was returned due to insufficient funds. Confirm when funds will be available. Cancel the failed transaction and create a new one for the confirmed date. The existing PAD agreement covers the new transaction. Cancel the schedule only if NSF returns repeatedly. | | **Schedule action** | Keep schedule. Cancel the failed transaction. Create a new transaction once the user confirms funds are available. | **Decision:** Cancel Schedule The account number does not exist at the named institution. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **What caused this** | Incorrect account number, wrong transit, or the account migrated during a bank merger. | | **Impact** | No funds collected. Any future attempts to this account will fail identically. | | **What you do next** | Cancel all scheduled payments immediately. Contact the user to collect correct banking details. Obtain a new PAD agreement. Create a new schedule with the verified account details. | | **Schedule action** | Cancel schedule. Collect new account details and a new PAD. Create a new schedule. | **Decision:** Review Before Acting The user placed a stop payment on this specific transaction. | | | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | The user contacted their bank to place a stop payment. This may be a one-time stop rather than a full PAD revocation. | | **Impact** | No funds collected this cycle. Intent is unknown until you speak with the user. | | **What you do next** | Contact the user before taking any action. Determine if this is a one-time stop or a full cancellation. If the user wants to continue, cancel the stopped transaction and create a new one after confirming intent in writing. If cancelling, cancel the schedule. Do not create a new transaction without speaking to the user first. | | **Schedule action** | Hold further action. Confirm user intent before continuing or cancelling the schedule. | **Decision:** Investigate / Escalate The transaction date is outside the allowable processing window. | | | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Transaction submitted with a date too far in the future or past. A technical submission error on your side, not a customer issue. | | **Impact** | No funds collected. Transaction was not presented to the receiving institution. | | **What you do next** | Cancel the failed transaction. Create a new transaction with the correct date. Do not contact the user. Do not cancel the schedule. | | **Schedule action** | Keep schedule. Cancel the failed transaction and create a new one with the correct date. | **Decision:** Cancel Schedule The bank account has been closed. | | | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | The account was closed prior to the transaction being presented. A permanent state. Any future attempts will fail. | | **Impact** | No funds collected. All future attempts to this account will fail. | | **What you do next** | Cancel all scheduled payments immediately. Contact the user to collect new banking details. Execute a new PAD agreement. Create a new schedule on the replacement account. Do not attempt any transaction on the closed account. | | **Schedule action** | Cancel schedule. New account details and new PAD required. | **Decision:** Cancel Schedule The account type does not permit debit transactions. | | | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Account type does not support debits. Examples: certain savings accounts, TFSA, RRSP, or accounts with a debit block. A permanent account characteristic. | | **Impact** | No funds collected. Retrying on the same account will always fail. | | **What you do next** | Cancel scheduled payments. Ask the user to provide a chequing account that supports PAD. Execute a new PAD agreement on the replacement account. | | **Schedule action** | Cancel schedule. User must provide an eligible chequing account. New PAD required. | **Decision:** Contact User / New Transaction Funds are present in the account but on hold and not yet available. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Account has funds on hold (e.g. recent deposit not yet cleared). A timing issue. The account is valid and the user has the money. The failed transaction cannot be modified or retried in Flinks. | | **Impact** | No funds collected this cycle. The account is healthy. | | **What you do next** | Contact the user to explain the payment was returned due to a temporary hold on their funds. Confirm when the hold will clear (typically 2 to 3 business days). Cancel the failed transaction and create a new one for the confirmed date. The existing PAD agreement covers the new transaction. | | **Schedule action** | Keep schedule. Cancel the failed transaction and create a new one once the hold clears. | **Decision:** Cancel Schedule The transaction currency does not match the account currency. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **What caused this** | A CAD transaction was submitted against a USD-denominated account. Flinks Pay only supports CAD. Indicates incorrect account information was collected at onboarding. | | **Impact** | No funds collected. This account cannot be used for CAD EFT debits. | | **What you do next** | Cancel all scheduled payments. Contact the user to confirm they have a CAD chequing account. Collect the correct account details. Execute a new PAD agreement. Create a new schedule on the correct account. | | **Schedule action** | Cancel schedule. User must provide a CAD account. New PAD required. | **Decision:** Cancel Schedule The account holder is deceased. | | | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | The financial institution has been notified of the account holder's death and has flagged or frozen the account. | | **Impact** | No funds collected. The account is no longer operable. | | **What you do next** | Cancel all scheduled payments immediately. Do not contact the account. Escalate to your internal ops team and compliance. Document the return and follow your internal procedures. | | **Schedule action** | Cancel schedule immediately. Escalate to ops and compliance. Do not retry. | **Decision:** Cancel Schedule The account has been legally restricted or frozen. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Account frozen by the financial institution due to a legal order, fraud investigation, or regulatory action. The account holder cannot use the account while the freeze is in place. | | **Impact** | No funds collected. The account cannot be debited in its current state. | | **What you do next** | Cancel all scheduled payments. Do not retry. Inform the user through your normal channels. The user must resolve the freeze with their bank and provide new account details before payments can resume. | | **Schedule action** | Cancel schedule. New account details and new PAD required once freeze is resolved. | **Decision:** Cancel Schedule The account number structure is invalid. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Account number fails structural validation: wrong length, invalid check digit, or a number that does not match any account. Typically a data entry error at onboarding. | | **Impact** | No funds collected. Retrying with the same details will produce the same result. | | **What you do next** | Cancel all scheduled payments. Contact the user to reconfirm and verify their banking details. Execute a new PAD agreement on the verified account. Create a new schedule. Consider adding bank account verification to your onboarding flow to prevent recurrence. | | **Schedule action** | Cancel schedule. Re-collect and verify account details. New PAD required. | **Decision:** Review Before Acting The name on the transaction does not match the account. | | | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Name submitted does not match the account holder name at the receiving institution. May be a nickname, maiden name, business name, or a joint account holder mismatch. | | **Impact** | No funds collected. May indicate a data quality issue at onboarding. | | **What you do next** | Contact the user to verify the exact name on their bank account. Cancel the failed transaction. Create a new transaction with the corrected name. If the account belongs to a different person entirely, cancel the schedule, assess PAD validity, collect a new PAD agreement, and create a new schedule. | | **Schedule action** | Cancel the failed transaction. Speak to the user before creating a new transaction with the corrected name. If account ownership differs, cancel the schedule. A new PAD and new schedule are required. | **Decision:** Investigate / Escalate The customer has initiated a return of a credited amount. Applies to EFT credit transactions only. | | | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | The customer is returning funds that were paid out to them via an EFT credit. | | **Impact** | Funds originally credited will be returned to your account. Not applicable to debit schedules. | | **What you do next** | Review the original credit transaction. Update your internal records and reconciliation. No schedule cancellation needed. Escalate if the return is unexpected. | | **Schedule action** | Not applicable to debit schedules. Review the original credit and update records. | ## PAD disputes (Rule H1) These codes indicate the user has formally disputed the PAD agreement. Under Rule H1, funds are automatically recalled while the dispute is under review. Contact Flinks Payments Support immediately for every code in this section. **Decision:** Cancel Schedule The user claims they never authorized a PAD. | | | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | User told their bank no PAD agreement exists. Either no PAD was obtained (compliance failure), the user has forgotten they signed it, or the PAD was not properly stored. | | **Impact** | Funds will be recalled automatically. You must return funds while the dispute is under review. High-severity event with a 90-day contestation window. | | **What you do next** | Cancel the schedule immediately. Do not retry. Locate the PAD agreement and provide it to Flinks for the recall challenge. If no PAD exists, the recall will be upheld. Contact Flinks Payments Support. | | **Schedule action** | Cancel schedule immediately. PAD evidence required to challenge the recall. | **Decision:** Review Before Acting The user claims the debit amount or date differed from PAD terms. | | | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | User agrees a PAD exists but claims the transaction does not match its terms: wrong amount, wrong date, or wrong frequency. | | **Impact** | Funds may be recalled within the 90-day window. Recall is automatic on user request pending review. | | **What you do next** | Do not create new transactions until the dispute is resolved. Review the PAD agreement terms against the transactions submitted. If correct, provide evidence to Flinks to challenge. If incorrect, return funds, cancel the schedule, and recreate it with corrected terms after reconfirming with the user. Contact Flinks Payments Support. | | **Schedule action** | Hold further action. Review against PAD terms. Cancel and recreate the schedule with corrected terms if the dispute is upheld. | **Decision:** Cancel Schedule The user has formally cancelled their PAD authorization. | | | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | User has formally revoked their PAD agreement. Under Rule H1, revocation takes effect immediately and you lose the right to debit the account. | | **Impact** | Authorization is gone. Any further debits will result in additional returns and potential regulatory exposure. | | **What you do next** | Cancel the schedule immediately. No further debits permitted. Contact the user to understand whether they want to continue with a different method. A fresh PAD agreement is required before any future debits. | | **Schedule action** | Cancel schedule. No further debits permitted. New PAD required if user wants to continue. | **Decision:** Review Before Acting The user claims they did not receive required advance notice of the debit. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **What caused this** | Payments Canada requires pre-notification of PAD debits. The user claims notification was not received or was insufficient. | | **Impact** | Funds subject to recall. Also a compliance risk: insufficient pre-notification can invalidate the PAD agreement. | | **What you do next** | Do not create new transactions until notification compliance is confirmed. Review your PAD notification process. If notification was sent correctly, provide evidence to Flinks. If there is a gap in your process, address it before any further debits. Contact Flinks Payments Support. | | **Schedule action** | Hold further action. Confirm notification compliance. Cancel the schedule if compliance gaps cannot be remediated before the next debit. | **Decision:** Review Before Acting A business claims the debit differed from PAD terms. | | | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Same as code 916 but for business (corporate) PAD agreements. The business claims the debit amount, date, or frequency does not match the signed agreement. | | **Impact** | Funds subject to recall. Business PADs have different Rule H1 provisions and contestation windows than personal PADs. | | **What you do next** | Do not create new transactions until the dispute is resolved. Review the business PAD terms against the transaction submitted. Challenge or correct as appropriate. Note that business PAD contestation windows differ from personal PADs. Contact Flinks Payments Support. | | **Schedule action** | Hold further action. Review against business PAD terms. Cancel and recreate the schedule with corrected terms if the dispute is upheld. | **Decision:** Cancel Schedule A business has formally cancelled its PAD authorization. | | | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Business has formally revoked its PAD agreement. Same principle as code 917 but for business accounts. Revocation is effective immediately under Rule H1. | | **Impact** | Authorization is revoked. Further debits are not permitted and will result in returns and regulatory exposure. | | **What you do next** | Cancel the schedule immediately. Contact the business to understand the reason and whether they want to continue via another method. A new business PAD is required before any further debits. | | **Schedule action** | Cancel schedule. No further debits permitted. New business PAD required. | **Decision:** Review Before Acting A business claims it did not receive required advance notice. | | | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | Same as code 918 but for business PAD agreements. The business claims pre-notification of the debit was insufficient under Payments Canada requirements. | | **Impact** | Funds subject to recall. Notification compliance is required for both personal and business PADs. | | **What you do next** | Do not create new transactions until business notification compliance is confirmed. Review your business notification process. Provide evidence if notification was sent correctly. Address gaps before continuing any debits. Contact Flinks Payments Support. | | **Schedule action** | Hold further action. Confirm business notification compliance. Cancel the schedule if compliance gaps cannot be remediated. | ## Other **Decision:** Investigate / Escalate The receiving financial institution is in default. An extremely rare event. | | | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **What caused this** | The receiving institution has been designated in default by Payments Canada. Affects the institution itself, not the individual account. | | **Impact** | No funds collected. All transactions at this institution are affected. | | **What you do next** | Do not retry until Payments Canada issues guidance. Contact Flinks Payments Support immediately. Keep the user informed that their payment is pending due to an issue outside your control. | | **Schedule action** | Suspend schedule pending Payments Canada guidance. Do not retry independently. | ## Handling PAD disputes When you see a PAD dispute code (902, 905, 907, 909, 911, 912, 915, 916, 917, 918, 919, 920, 921): For codes 915 to 921, you have a 90-day contestation window (personal PADs) to provide evidence the agreement is valid and the debit was authorized. Follow the schedule action for the specific code. **Cancel the schedule** for revocation and "no agreement" codes (915, 917, 920). For the "review" codes (916, 918, 919, 921), do not create new transactions until the dispute is resolved. Then either cancel the schedule or recreate it with corrected terms. Update your internal records. If the dispute is upheld, you cannot resume debits on that account without a fresh PAD agreement. ## Checking return codes Return codes for a failed transaction are available via the API. Call the [Get Schedule](/api/pay/endpoints/eft/get-schedule) endpoint and inspect the `statusDetails` and return code fields on the relevant payment. See [Troubleshooting Payments](/guides/pay/troubleshooting) for the broader status lifecycle. ## Related resources * [Getting Started with EFT](/guides/pay/eft/eft-debit) * [Set Up Flinks Pay Using EFT](/guides/pay/eft/setup-flinks-pay) * [Troubleshooting Payments](/guides/pay/troubleshooting) * [Cancel Schedule API](/api/pay/endpoints/eft/cancel-schedule) * [Contact Flinks Support](/guides/support/contact-flinks) # Generate a PAD Link from a Contact Source: https://docs.flinks.com/guides/pay/eft/generate-pad-link Walk through the API flow to generate a Pre-Authorized Debit signing link from a contact ID. **Work in progress** This section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities. If you're interested in early access or want to learn more about what's coming, feel free to [reach out to the team](/guides/support/contact-flinks). This guide walks through the complete flow to generate a PAD (Pre-Authorized Debit) signing link using the EFT API, starting from a contact ID. The PAD link is a URL you present to your end user so they can authorize the payment. ## Prerequisites * A valid `x-client-id` API key * A stored contact with at least one EFT bank account ## Overview The flow requires four API calls in sequence: ```mermaid theme={null} flowchart LR A[Get Contact] --> B[Create Transaction] B --> C[Get Schedule] C --> D[Get PAD] ``` | Step | Endpoint | Returns | | ---- | ------------------------------------ | ---------------------------------- | | 1 | `GET /api/v1/contacts/{contactId}` | Contact details + bank account IDs | | 2 | `POST /api/v1/transactions` | Schedule with `id` | | 3 | `GET /api/v1/schedules/{scheduleId}` | Schedule details with `padId` | | 4 | `GET /api/v1/pads/{padId}` | PAD details with `padLink` | ## Step 1: Get the Contact Retrieve the contact to obtain their EFT bank account ID. ```bash theme={null} curl 'https://payments.flinksapp.com/api/v1/contacts/{{contactId}}' \ --header 'x-client-id: {{your-client-id}}' ``` From the response, note the `id` from the contact's EFT account. You'll use it as the `accountId` in the transaction request. ## Step 2: Create the Transaction Create a DEBIT transaction using the contact's `contactId` and `accountId` from Step 1, and a `transactionCode` from the [transaction codes reference](/api/pay/endpoints/eft/transaction-codes). ```bash theme={null} curl 'https://payments.flinksapp.com/api/v1/transactions' \ --header 'Content-Type: application/json' \ --header 'x-client-id: {{your-client-id}}' \ --data '[{ "transactionCode": 450, "amount": 250.00, "paymentDirection": "DEBIT", "currency": "CAD", "payor": { "accountInfo": { "accountId": "{{accountId}}" }, "contactInfo": { "contactId": "{{contactId}}" } }, "scheduleInfo": { "paymentFrequency": "Monthly", "startDate": "2026-05-01", "transactionsCount": 12 } }]' ``` The response contains a `schedules` array. Note the `id` (schedule ID) from the first item. The `padId` field in the create transaction response is `null` at this point. The PAD agreement is generated asynchronously. You need to poll the schedule to obtain it. ## Step 3: Get the Schedule (poll for padId) Retrieve the schedule to check if the PAD has been generated. ```bash theme={null} curl 'https://payments.flinksapp.com/api/v1/schedules/{{scheduleId}}' \ --header 'x-client-id: {{your-client-id}}' ``` Check the `padId` field in the response: * If `padId` is **not null**: proceed to Step 4 * If `padId` is **null**: the PAD is still being generated; wait and retry We recommend polling every 2 to 3 seconds for up to 30 seconds. If `padId` is still null after that, contact Flinks support. ## Step 4: Get the PAD Link Once you have the `padId`, retrieve the PAD agreement details including the signing link. ```bash theme={null} curl 'https://payments.flinksapp.com/api/v1/pads/{{padId}}' \ --header 'x-client-id: {{your-client-id}}' ``` The response includes a `padLink` field: this is the URL you present to your end user. ## Presenting the PAD to the End User Redirect or display the `padLink` to your end user so they can review and sign the PAD agreement. Once signed, the payment schedule becomes active. ```javascript theme={null} // Example: redirect user to the PAD signing page window.location.href = padLink; ``` ## Complete Example ```javascript theme={null} const BASE_URL = 'https://payments.flinksapp.com/api/v1'; const headers = { 'Content-Type': 'application/json', 'x-client-id': 'your-client-id' }; async function generatePadLink(contactId) { // Step 1: Get contact details const contact = await fetch(`${BASE_URL}/contacts/${contactId}`, { headers }) .then(r => r.json()); const accountId = contact.accounts.eftAccounts[0].id; // Step 2: Create transaction (450 = Misc. Payments, see transaction codes reference) const txResponse = await fetch(`${BASE_URL}/transactions`, { method: 'POST', headers, body: JSON.stringify([{ transactionCode: 450, amount: 250.00, paymentDirection: 'DEBIT', currency: 'CAD', payor: { accountInfo: { accountId }, contactInfo: { contactId } }, scheduleInfo: { paymentFrequency: 'Monthly', startDate: '2026-05-01', transactionsCount: 12 } }]) }).then(r => r.json()); const scheduleId = txResponse.schedules[0].id; // Step 3: Poll schedule for padId let padId = null; for (let i = 0; i < 10; i++) { const schedule = await fetch(`${BASE_URL}/schedules/${scheduleId}`, { headers }) .then(r => r.json()); if (schedule.padId) { padId = schedule.padId; break; } await new Promise(resolve => setTimeout(resolve, 3000)); } if (!padId) throw new Error('PAD not generated within timeout'); // Step 4: Get PAD link const pad = await fetch(`${BASE_URL}/pads/${padId}`, { headers }) .then(r => r.json()); return pad.padLink; } ``` ## API Reference * [Get Contact](/api/pay/endpoints/eft/get-contact) * [Transaction Codes](/api/pay/endpoints/eft/transaction-codes) * [Create Transaction](/api/pay/endpoints/eft/create-transaction) * [Get Schedule](/api/pay/endpoints/eft/get-schedule) * [Get PAD Agreement](/api/pay/endpoints/eft/get-pad) # Guaranteed EFT Source: https://docs.flinks.com/guides/pay/eft/guaranteed-eft Set up and use Flinks Guaranteed EFT (G-EFT) for secure, real-time account funding. Flinks Guaranteed EFT (G-EFT) reduces the risk and inefficiencies of traditional EFT transactions by providing a payment guarantee before funds are moved. This ensures that the payment will be honored, reducing exposure to NSF (Non-Sufficient Funds) returns. ## How G-EFT works The Guaranteed EFT flow adds a guarantee step before the standard EFT process: 1. **Session creation**: Your server calls `/Authorize` and `/Sessions/Initiate` to create a payment session. 2. **Customer authentication**: The customer authenticates through Flinks Connect, selects their account, and specifies the payment amount. 3. **Guarantee issuance**: Flinks analyzes the account and issues a payment guarantee (or refuses if risk is too high). 4. **Guarantee acceptance**: You can explicitly accept or reject the guarantee, or configure auto-acceptance for low-risk guarantees. 5. **Payment processing**: Once the guarantee is accepted, Flinks initiates the EFT and delivers funds to your settlement account. ## Key features | Feature | Description | | :------------------------- | :---------------------------------------------------------------------------------------------- | | **Guarantee webhook** | Receive a webhook notification when a guarantee is issued | | **Accept/reject** | Explicitly accept or reject guarantees before completing the session | | **Auto-acceptance** | Configure automatic acceptance for low-risk guarantees | | **Next Best Offer** | Optionally receive an alternative amount suggestion if the requested amount can't be guaranteed | | **Flexible settlement** | Direct funds to your organization's settlement account or individual user accounts | | **Session status webhook** | Receive notifications when a session moves to failed, cancelled, or completed status | | **Payor details endpoint** | Retrieve complete payor account details (institution code, transit number, account number) | ## Setting up G-EFT ### Prerequisites * An active Flinks Pay instance with EFT enabled * G-EFT feature enabled by your Flinks Representative ### Integration flow 1. **Authorize**: Call the [/Authorize](/api/pay/endpoints/authorize/authorize) endpoint to get an `access_token`. 2. **Initiate session**: Call `/Sessions/Initiate` with the `access_token` to create a G-EFT session. 3. **Launch the application**: Open the Flinks Pay application for the customer using your session URL: ``` https://{BaseURL}/app/?sessionId={sessionId} ``` 4. **Handle guarantee**: Listen for the guarantee webhook or poll the session status to determine if a guarantee was issued. 5. **Accept or reject**: Use the guarantee details to accept or reject the payment. 6. **Monitor settlement**: Track the payment through to settlement using the `/PaymentRequests` GET endpoint or status webhooks. ## Sandbox testing To test G-EFT in the sandbox environment: 1. Use your sandbox credentials provided by Flinks during onboarding. 2. Create a session using the test institution **Flinks Capital**. 3. Authenticate with username `Greatday` and password `Everyday`. 4. Complete the payment flow and verify the guarantee webhook is received. Webhook testing is not available in sandbox environments. To test webhooks with G-EFT, you'll need to use your staging or production instance. Contact your Flinks Representative for staging access. ## Related resources * [EFT Debit overview](/guides/pay/eft/eft-debit) * [Set up Flinks Pay with EFT](/guides/pay/eft/setup-flinks-pay) * [Webhooks](/guides/webhooks/introduction) * [Troubleshooting payments](/guides/pay/troubleshooting) # Set Up Flinks Pay Using EFT Source: https://docs.flinks.com/guides/pay/eft/setup-flinks-pay Set up Flinks Pay with EFT as the payment method, from sandbox testing to production. **Work in progress** This section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities. If you're interested in early access or want to learn more about what's coming, feel free to [reach out to the team](/guides/support/contact-flinks). This guide walks you through setting up Flinks Pay with EFT (Electronic Funds Transfer) as the payment method, from sandbox testing to production. ## Prerequisites Before starting your integration: * Complete Flinks onboarding and receive your API credentials (`x-client-id`) * Review and finalize your Pre-Authorized Debit (PAD) agreement with Flinks * Obtain sandbox access credentials from your Flinks representative ## Step 1: Set Up Environments Use the appropriate base URL for your environment: | Environment | Base URL | | -------------- | ------------------------------------ | | **Sandbox** | `https://payments-uat.flinksapp.com` | | **Production** | `https://payments.flinksapp.com` | Start development in the sandbox environment. All examples below use the sandbox URL. ## Step 2: Authenticate Obtain an access token using the `/api/v1/authorize` endpoint with your Client ID and Secret: ```bash theme={null} curl --location 'https://payments-uat.flinksapp.com/api/v1/authorize' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Basic {{clientId:clientSecret}}' \ --data-urlencode 'grant_type=client_credentials' ``` The response includes an `access_token` valid for 299 seconds. See [Authorize](/api/pay/endpoints/authorize/authorize) for details. ## Step 3: Create an EFT Transaction Call `POST /api/v1/transactions` to create a new EFT transaction. Include your `x-client-id` header for authentication. ### One-Time Debit Example ```bash theme={null} curl --location 'https://payments-uat.flinksapp.com/api/v1/transactions' \ --header 'Content-Type: application/json' \ --header 'x-client-id: {{your-client-id}}' \ --data '[{ "transactionCode": 1, "amount": 100.00, "description": "Invoice 12345", "crossReferenceNumber": "INV-12345", "paymentDirection": "DEBIT", "currency": "CAD", "payor": { "accountInfo": { "institutionCode": "001", "transitNumber": "12345", "accountNumber": "1234567" }, "contactInfo": { "firstName": "John", "lastName": "Smith" } }, "scheduleInfo": { "paymentFrequency": "OneTime", "startDate": "2026-04-15" } }]' ``` The response returns a `schedules` array containing the created schedule with its ID and status. ### Recurring Debit Example ```bash theme={null} curl --location 'https://payments-uat.flinksapp.com/api/v1/transactions' \ --header 'Content-Type: application/json' \ --header 'x-client-id: {{your-client-id}}' \ --data '[{ "transactionCode": 1, "amount": 50.00, "paymentDirection": "DEBIT", "currency": "CAD", "payor": { "accountInfo": { "institutionCode": "001", "transitNumber": "12345", "accountNumber": "1234567" }, "contactInfo": { "firstName": "John", "lastName": "Smith" } }, "scheduleInfo": { "paymentFrequency": "Monthly", "startDate": "2026-04-15", "transactionsCount": 12 } }]' ``` See [Create Transaction](/api/pay/endpoints/eft/create-transaction) for the full request and response schema. ## Step 4: Handle Recurring Schedules For recurring debit transactions, you can define a schedule using one of the following approaches: * **End date**: Payments continue on the set frequency until the end date is reached. * **Transaction count**: A fixed number of payments (maximum 300) are executed on the set frequency. You must provide exactly one of `endDate` or `transactionsCount` for recurring schedules. ### Available Frequencies | Frequency | Description | | ---------- | ----------------------------------- | | `OneTime` | Single payment on the start date | | `Weekly` | Every week from the start date | | `Biweekly` | Every two weeks from the start date | | `Monthly` | Every month from the start date | ## Step 5: Cancel Schedules When Needed To cancel an upcoming schedule: ```bash theme={null} curl --location --request POST \ 'https://payments-uat.flinksapp.com/api/v1/schedules/{{scheduleId}}/cancel' \ --header 'x-client-id: {{your-client-id}}' ``` To cancel a specific payment request: ```bash theme={null} curl --location --request POST \ 'https://payments-uat.flinksapp.com/api/v1/paymentrequests/{{requestId}}/cancel' ``` ## Step 6: Go to Production When you are ready to go live: 1. Switch your base URL from `payments-uat.flinksapp.com` to `payments.flinksapp.com`. 2. Use your production API credentials (provided by Flinks during onboarding). 3. Verify your PAD agreement is finalized and approved. 4. Confirm your settlement account is configured with Flinks. ## Field Specifications Summary | Field | Constraint | | ---------------------- | ----------------------------------------- | | `amount` | Minimum \$0.01 | | `description` | Max 15 characters | | `crossReferenceNumber` | Alphanumeric + hyphens, max 36 characters | | `institutionCode` | Exactly 3 digits | | `transitNumber` | Exactly 5 digits | | `accountNumber` | 7 to 12 digits | | `transactionsCount` | Max 300 (recurring only) | ## Common Integration Issues * **Start date must be in the future** for debit transactions. Same-day start dates are only valid for credit transactions. * **DEBIT requires `payor`**, not `payee`. CREDIT requires `payee`, not `payor`. * **Recurring schedules** need either `endDate` or `transactionsCount`, but not both. * **Credit transactions** only support `OneTime` frequency with a same-day start date. * **Account info** must provide either an `accountId` or the combination of `institutionCode` + `transitNumber` + `accountNumber`, but not both. # Use an Event Listener Source: https://docs.flinks.com/guides/pay/geft/event-handling Add an event listener to track user progress and payment events in the GEFT widget. The GEFT widget triggers events based on authentication responses and different steps that the user completes within the payment flow. We recommend adding an Event Listener to your GEFT widget integration to track your users' progress and improve their overall experience. As a user progresses through the guaranteed payment flow, you'll be notified of all successful (and unsuccessful) attempts to complete a payment. When a user fails to complete the flow successfully, you can review the data from the Event Listener and determine exactly what happened to prevent the same issue from occurring again. For more information about what you can receive from the Event Listener, refer to Reviewing your Event Listener data. ## Add the Event Listener to your Integration To add the Event Listener to your GEFT widget integration, place the following script on the same page as your GEFT widget: ```html html theme={null} ``` ## Reviewing your Event Listener data You'll receive the following types of event data from the GEFT widget: * A JavaScript event, which indicates a user event during the payment flow * Widget state changes, which indicate progress through the guarantee process Read the lists below for information on what sorts of event data you can receive for user events and widget state changes. We will notify you of the following user events in the GEFT widget: | **EVENT NAME** | **DESCRIPTION** | **TERMINATING EVENT** | | :----------------------------------------- | :-------------------------------------------------------------------------------------------------------- | :-------------------- | | `APP_INITIATED` | The payment flow has been initiated. Carries `referenceId` (the value you set when creating the session). | No | | `CONSENT_DISABLED` | Emitted when using a custom consent screen instead of the Flinks-provided one (optional configuration). | No | | `INSTITUTION_SELECTED` | The user has selected their financial institution. | No | | `SUBMIT_CREDENTIAL` | The user has submitted their bank login credentials. | No | | `SUBMIT_MFA` | The user has submitted multi-factor authentication answers. | No | | `ACCOUNT_SELECTED` | The user has selected which bank account to use for the payment. | No | | `COMPONENT_DEPOSIT_CONTINUE` | The user has clicked to continue after entering or confirming the payment amount. | No | | `GUARANTEE_OFFERED` | Flinks can guarantee the payment and has presented the guarantee offer to the user. | No | | `COMPONENT_PAD_DOWNLOADED` | The Pre-Authorized Debit (PAD) agreement has been downloaded or signed by the user. | No | | `SUCCESS` | The user has successfully completed the GEFT payment flow. The iframe should be closed. | Yes | | `GUARANTEE_FAILED` | Flinks cannot guarantee the transaction. The user should be offered alternative payment methods. | Yes | | `COMPONENT_PAD_WARNING_SCREEN_EXIT` | The user has opted not to accept the PAD agreement and has chosen to exit the flow. | Yes | | `COMPONENT_OTHER_FUNDING_OPTIONS_SELECTED` | Flinks cannot guarantee the transaction and the user has selected other funding options. | Yes | | `COMPONENT_NBO_RETURN_TO_CLIENT_SELECTED` | The user has chosen to return to your application for alternative payment methods. | Yes | | `CLOSE` | The user has clicked the close button (X) to exit the widget. | Yes | ## Event Examples ### Flow Events **APP\_INITIATED** ```json theme={null} { "step": "APP_INITIATED", "referenceId": "{{referenceId}}" } ``` **INSTITUTION\_SELECTED** ```json theme={null} { "step": "INSTITUTION_SELECTED" } ``` **SUBMIT\_CREDENTIAL** ```json theme={null} { "step": "SUBMIT_CREDENTIAL" } ``` **ACCOUNT\_SELECTED** ```json theme={null} { "step": "ACCOUNT_SELECTED" } ``` ### Guarantee Events **GUARANTEE\_OFFERED** ```json theme={null} { "step": "GUARANTEE_OFFERED" } ``` **GUARANTEE\_FAILED (Terminating)** ```json theme={null} { "step": "GUARANTEE_FAILED" } ``` ### Terminal Events **SUCCESS (Terminating)** ```json theme={null} { "step": "SUCCESS" } ``` **CLOSE (Terminating)** ```json theme={null} { "step": "CLOSE" } ``` ## Implementation Examples ### Basic Event Handling ```html theme={null} ``` ### Advanced Event Tracking ```javascript theme={null} // Enhanced event listener with analytics let paymentReferenceId = null; window.addEventListener('message', function(e) { const eventData = e.data; // Track all GEFT events if (eventData.step) { analytics.track('GEFT Widget Event', { step: eventData.step, timestamp: new Date().toISOString() }); } // Handle specific business logic switch(eventData.step) { case 'APP_INITIATED': // Capture the referenceId to use when the payment completes paymentReferenceId = eventData.referenceId; break; case 'GUARANTEE_FAILED': handleGuaranteeFailure(eventData); break; case 'SUCCESS': handlePaymentSuccess(eventData); break; case 'COMPONENT_PAD_WARNING_SCREEN_EXIT': handlePadDeclined(eventData); break; } }); function handleGuaranteeFailure(eventData) { // Close GEFT widget document.getElementById('geft-widget').style.display = 'none'; // Show user-friendly message showMessage('We cannot guarantee this payment method. Please choose an alternative.'); // Enable other payment options enableCreditCardPayment(); enableETransferPayment(); } function handlePaymentSuccess(eventData) { // Read the payment sessionId back from the widget URL you embedded const widget = document.getElementById('geft-widget'); const sessionId = new URL(widget.src).searchParams.get('sessionId'); // Close GEFT widget widget.style.display = 'none'; // Show success message showSuccessMessage('Payment completed successfully!'); // Redirect to confirmation page setTimeout(() => { window.location.href = `/payment-confirmation?sessionId=${sessionId}&referenceId=${paymentReferenceId}`; }, 2000); } ``` ### Error Handling and Timeouts ```javascript theme={null} let widgetTimeout; const WIDGET_TIMEOUT_MS = 300000; // 5 minutes window.addEventListener('message', function(e) { const eventData = e.data; // Reset timeout on any event clearTimeout(widgetTimeout); // Handle the event handleGeftEvent(eventData); // Set new timeout for non-terminal events const terminalEvents = ['SUCCESS', 'GUARANTEE_FAILED', 'CLOSE', 'COMPONENT_PAD_WARNING_SCREEN_EXIT']; if (!terminalEvents.includes(eventData.step)) { widgetTimeout = setTimeout(handleWidgetTimeout, WIDGET_TIMEOUT_MS); } }); function handleWidgetTimeout() { console.warn('GEFT widget timeout - no events received'); // Show timeout message to user showTimeoutMessage('The payment process is taking longer than expected.'); // Offer alternative options showAlternativePaymentOptions(); } ``` ## Event Flow Examples ### Successful Payment Flow 1. `APP_INITIATED` - Payment flow initiated 2. `INSTITUTION_SELECTED` - User selects their bank 3. `SUBMIT_CREDENTIAL` - User enters bank credentials 4. `SUBMIT_MFA` - User completes multi-factor authentication (if required) 5. `ACCOUNT_SELECTED` - User selects the account for payment 6. `COMPONENT_DEPOSIT_CONTINUE` - User confirms payment amount 7. `GUARANTEE_OFFERED` - Flinks approves the guarantee 8. `COMPONENT_PAD_DOWNLOADED` - User signs PAD agreement 9. `SUCCESS` - Payment completed successfully ### Guarantee Declined Flow 1. `APP_INITIATED` - Payment flow initiated 2. `INSTITUTION_SELECTED` - User selects their bank 3. `SUBMIT_CREDENTIAL` - User enters bank credentials 4. `ACCOUNT_SELECTED` - User selects account 5. `COMPONENT_DEPOSIT_CONTINUE` - User confirms amount 6. `GUARANTEE_FAILED` - Flinks cannot guarantee the payment 7. `COMPONENT_OTHER_FUNDING_OPTIONS_SELECTED` - User chooses alternative methods ### User Exit Flow 1. `APP_INITIATED` - Payment flow initiated 2. `INSTITUTION_SELECTED` - User selects their bank 3. `CLOSE` - User clicks X to close widget ## Testing Event Handling During development, test event handling with all scenarios in the sandbox environment. Use the test cases provided in the [Sandbox Guide](/guides/pay/geft/sandbox-overview) to verify proper event handling for both successful and failed flows. Test the following scenarios: * **Happy path**: Complete successful payment flow * **Guarantee failure**: Handle declined guarantees gracefully * **User abandonment**: Handle when users close the widget * **Network issues**: Handle timeouts and connectivity problems * **PAD decline**: Handle when users don't accept the agreement ## Related Documentation * **[GEFT Widget](/guides/pay/geft/widget)**: Widget configuration and setup * **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Complete implementation walkthrough * **[Sandbox Guide](/guides/pay/geft/sandbox-overview)**: Testing procedures and test data # Getting Started with Guaranteed EFT Source: https://docs.flinks.com/guides/pay/geft/overview Learn how GEFT provides guaranteed EFT payments with real-time risk evaluation by Flinks. When you use GEFT (Guaranteed Electronic Funds Transfer) as your payment method, Flinks Pay collects your money using a Guaranteed Electronic Funds Transfer while assuming the EFT risk on your behalf. This product is currently offered strictly to licensed banks only. Choose this payment method if: * You need guaranteed payments with immediate risk transfer to Flinks. * You want to offer customers a secure EFT option without bearing collection risk. * You require real-time guarantee decisions during the payment flow. Customer has the option to automatically proceed with the payment or to receive risk profile from Flinks and make a decision whether they want to proceed or not. ## What is GEFT? GEFT allows you to initiate a one-time withdrawal (debit) from an end-user's account with guaranteed settlement. For each session, Flinks evaluates the transaction and will either: * **Provide a guarantee**: the payment is approved and Flinks assumes the EFT risk; you do not need to take any additional action to initiate the payment. * **Decline a guarantee**: the payment is not approved; the user should be offered an alternative payment method outside of GEFT. ## Key Features . The settlement is guaranteed for the customer, so they can proceed with fronting that amount to the end user. ### Guarantee System * **Risk Assumption**: Flinks assumes all EFT risks for guaranteed transactions * **Automatic Processing**: Guaranteed payments are automatically initiated without additional merchant action * **Real-time Evaluation**: Each transaction is evaluated for guarantee eligibility during the flow ### PAD Requirement Before a debit can be processed, Flinks must have a valid Pre-Authorized Debit (PAD) agreement completed by the user. Through the session creation and subsequent status updates, Flinks confirms that the user has agreed to the PAD terms before initiating the payment. ### Funds Availability For guaranteed transactions, funds typically become available shortly after the next Payments Canada submission window. Timelines can vary by receiving financial institution. In most cases, EFT debit funds are available to Flinks within 24 hours, but this may take up to 72 hours depending on the sending institution. ## Payment Processing Windows Flinks follows Payments Canada EFT processing windows. Guaranteed EFT payments are automatically scheduled and initiated according to these windows: | Day | Window 1 Cutoff | Window 1 Submission | Window 2 Cutoff | Window 2 Submission | Window 3 Cutoff | Window 3 Submission | | -------- | --------------- | ------------------- | --------------- | ------------------- | --------------- | ------------------- | | Mon-Fri | 2:30am EDT | 9:30am EDT | 1:30pm EDT | 4:30pm EDT | 6:00pm EDT | 9:00pm EDT | | Sat-Sun | N/A | N/A | N/A | N/A | N/A | N/A | | Holidays | N/A | N/A | N/A | N/A | N/A | N/A | Any payment created before a cutoff time will be delivered to your account within approximately 2 hours of the next window; payments created after a cutoff will be processed in the following window. ## Integration Components A Guaranteed EFT integration typically includes three main components: 1. **Onboarding and verification** 2. **Initiating and monitoring payments** 3. **Reconciling payments** ### Guarantee Decision During the Flow After the user connects their external account and before the PAD agreement is presented, Flinks evaluates the transaction and issues a Guaranteed EFT status indicating whether the transaction can be guaranteed. This status is available via: * Front-end JavaScript events * The [/sessions/status](/api/pay/endpoints/geft/sessions-status) API * Webhooks If the guarantee is not offered, the session ends and the user cannot proceed with GEFT for that attempt. If the guarantee is offered, and the user accepts and signs the PAD agreement, Flinks automatically initiates the payment and updates the status. ## Payment Instructions and Settlement When a guarantee is accepted, Flinks issues two payment instructions: 1. **EFT credit** from the Flinks float account to your configured destination account 2. **EFT debit** from the end-user's account to the Flinks float account From a settlement perspective, the key status is the EFT credit to your account, as this reflects the funds you have received. The associated debit from the end-user's account is also reported for visibility (e.g., AML and operational review), but does not change your guaranteed position. ## Getting Started To implement GEFT in your application: 1. **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Complete setup and implementation walkthrough 2. **[API Documentation](/api/pay/endpoints/geft/index)**: Technical API reference and endpoints 3. **[Event Handling](/guides/pay/geft/event-handling)**: Frontend event integration 4. **[Sandbox Guide](/guides/pay/geft/sandbox-overview)**: Testing and development environment setup ## Requirements Before starting your GEFT integration: * **Onboarding**: Complete standard onboarding and verification process * **MSB Requirements**: Meet applicable MSB requirements and be approved to use the service * **Dedicated Support**: You will be supported by a Relationship Manager and Technical Account Manager * **Production Instance**: Flinks will provision your production GEFT instance and funding account details * **Sandbox Access**: Use the sandbox environment for testing and integration development Contact your Flinks representative to begin the onboarding process for GEFT. # GEFT Production Readiness Source: https://docs.flinks.com/guides/pay/geft/production-readiness Verify critical testing requirements and identity validation before going live with GEFT. This guide covers critical requirements and verification steps before going live with GEFT. ## Critical Testing Requirements **Important**: For every connection and funding flow, the session information used to initiate the journey must match the user profile returned by the financial institution. ### Name Matching Rules * **Use exact first and last names** provided for each test user * **Any mismatch causes session to become invalid** * **Flow stops immediately** at validation stage * **No transaction or agreement** should be created * **User must see clear generic error message** ### Identity Validation Testing Test identity validation with these scenarios: 1. **Correct Information**: Use exact names from test scenarios 2. **Name Mismatch**: Create session with incorrect firstName/lastName 3. **Partial Match**: Test with slight variations (e.g., "Bob" vs "Robert") 4. **Special Characters**: Test names with apostrophes, hyphens, accents Expected behavior for mismatches: * Session status becomes `Failed` with `EFT0403` * User sees generic error message * No PAD agreement is created * No funds are moved ## Status Code Testing Test different status responses using various scenarios: | Status | StatusDetails | Test Scenario | Description | | --------- | ------------- | ---------------------------------------------------------------- | ---------------------------------------------- | | Initiated | EFT0101 | Any scenario before user starts | Session created, awaiting user start | | Completed | EFT0301 | Happy1, Happy2, Happy3 | Transaction scheduled, session fully completed | | Completed | EFT0302 | Interrupt before PAD signature | Bank account validated, awaiting PAD signature | | Failed | EFT0401 | Use incorrect credentials | Login failed - invalid credentials | | Failed | EFT0402 | Unhappy1 (Joe Fails) | Eligibility failed - no guarantee offered | | Failed | EFT0403 | Wrong name in session creation | Identity failed - user info mismatch | | Canceled | EFT0501 | Call [/cancel](/api/pay/endpoints/geft/sessions-cancel) endpoint | Session canceled by API request | | Expired | EFT0601 | Leave session inactive | Session timed out | ### Status Testing Checklist * [ ] Verify all status codes return correctly * [ ] Test status polling handles each terminal state * [ ] Confirm statusDetails provide sufficient information * [ ] Validate proper error messages for each failure type ## Pre-Production Checklist Complete this checklist before going live: ### 1. Integration Testing * [ ] **Test all happy path scenarios successfully** * [ ] Happy1: Standard success flow * [ ] Happy2: Next best offer flow * [ ] Happy3: French language flow * [ ] **Test all unhappy path scenarios and error handling** * [ ] Unhappy1: Guarantee failure * [ ] Unhappy2-6: Additional failure scenarios * [ ] **Verify event handling for all scenarios** * [ ] All events fire correctly * [ ] Event sequence matches expected flow * [ ] Terminal events properly handled ### 2. Technical Validation * [ ] **Test session status polling and timeouts** * [ ] Polling handles all terminal states * [ ] Timeout handling works correctly * [ ] Error recovery implemented * [ ] **Validate proper name matching implementation** * [ ] Exact name matches work * [ ] Name mismatches fail gracefully * [ ] Error messages are user-friendly * [ ] **Test amount handling (with/without preset amounts)** * [ ] Preset amounts prevent user modification * [ ] User-entered amounts work correctly * [ ] Min/max limits enforced ### 3. User Experience * [ ] **Verify proper error messaging for users** * [ ] Generic error for identity mismatch * [ ] Clear guidance for guarantee failures * [ ] Helpful messages for technical errors * [ ] **Test alternative payment method flows** * [ ] Graceful fallback when guarantee fails * [ ] Proper handling of user cancellation * [ ] Alternative options presented clearly ### 4. Security and Compliance * [ ] **API key management implemented securely** * [ ] API keys stored securely (not hardcoded) * [ ] No sensitive data in logs * [ ] **PAD agreement handling compliant** * [ ] Proper consent flow * [ ] Agreement storage if required * [ ] Rejection handling implemented ### 5. Monitoring and Observability * [ ] **Logging implemented for key events** * [ ] Session creation/completion * [ ] Error conditions * [ ] Performance metrics * [ ] **Error tracking configured** * [ ] Failed transactions monitored * [ ] Alert thresholds set * [ ] Escalation procedures defined ## Environment Transition ### From Sandbox to Production 1. **Update base URLs**: * Sandbox: `https://payments-uat.flinksapp.com` * Production: `https://payments.flinksapp.com` 2. **Replace credentials**: * Use production credentials provided during onboarding * Verify credentials work with authentication endpoint 3. **Update configuration**: * Switch to production environment variables * Update any hardcoded test references * Remove debug logging if applicable ### Production Environment Differences * **Real bank connections**: Actual financial institution authentication * **Real funds movement**: Transactions involve actual money * **Different performance**: Production may have different response times * **Monitoring**: Enhanced logging and monitoring capabilities ## Support and Escalation ### When to Contact Support * **Authentication issues** with production credentials * **Unexpected status codes** not covered in documentation * **Performance issues** affecting user experience * **Integration questions** not covered in guides ### Support Channels * **Technical Account Manager**: Primary contact for technical issues * **Client Dashboard**: Monitor transactions and view logs * **Support Documentation**: Reference specific test scenarios when reporting issues ### Information to Provide When contacting support, include: * **Session ID** of problematic transaction * **Reference ID** used in session creation * **Timestamp** of issue occurrence * **Error messages** received * **Expected vs actual behavior** ## Compliance Considerations ### PAD Agreement Requirements * Ensure proper consent collection * Store agreements as required by regulations * Provide clear terms and conditions * Handle agreement rejections appropriately ### Data Security * Encrypt sensitive data in transit and at rest * Follow PCI DSS guidelines if applicable * Implement proper access controls * Regular security audits and updates ### Record Keeping * Maintain transaction logs for required periods * Store session data for reconciliation * Keep audit trails for compliance reviews * Document any data retention policies ## Performance Optimization ### Best Practices * **Implement connection pooling** for API calls * **Use appropriate timeouts** for network calls * **Implement retry logic** with exponential backoff ### Monitoring Metrics Track these key metrics in production: * **Session success rate**: Percentage of completed transactions * **API response latency**: Time for API responses * **Session creation time**: Time from request to session ID * **Error rates**: Frequency of different error types * **User abandonment**: Where users exit the flow ## Next Steps Once you've completed this checklist: 1. **Schedule go-live** with your Technical Account Manager 2. **Plan gradual rollout** if possible (percentage of traffic) 3. **Monitor closely** during initial production period 4. **Have rollback plan** ready if issues occur ## Related Documentation * **[Sandbox Overview](/guides/pay/geft/sandbox-overview)**: Understanding the test environment * **[Test Scenarios](/guides/pay/geft/test-scenarios)**: All available test cases * **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Implementation steps # GEFT Sandbox Overview Source: https://docs.flinks.com/guides/pay/geft/sandbox-overview Use the GEFT sandbox to test session creation, user scenarios, and front-end design before go-live. The Flinks Guaranteed EFT Sandbox is a test environment designed to validate both back-end and front-end functionalities of the GEFT product. ## Overview The sandbox environment: * **Does not connect to real accounts** or move actual funds * **Simulates production environment** to help test various scenarios * **Prepares your integration** and ensures readiness for go-live * **Does not replace** testing with real accounts and transactions before deployment The sandbox has two primary purposes: 1. **Test session creation** and different user scenarios, and integrate accordingly 2. **Review front-end design** and configuration, ensuring they align with your expectations ## Base Testing Flow During testing, follow this sequence: 1. **Authenticate** with sandbox using your secret credentials 2. **Initiate session** using test scenario name and desired dynamic parameters 3. **Launch iFrame** with Session ID appended to trigger front-end scenario 4. **Complete front-end flow** by entering specified username/password for that scenario * "Happy" paths will return a SUCCESS JS event * "Unhappy" paths will display relevant error screen or event 5. **Check session status** by calling [/sessions/status](/api/pay/endpoints/geft/sessions-status) endpoint You can perform any front-end actions during testing. Each test user dynamically supports both successful and failed outcomes, reflected in the session's back-end status. ## Sandbox Environment Access Your sandbox credentials and base URI will be provided during onboarding. The sandbox environment includes: * **API Endpoints**: Same as production but with test data * **Dashboard Access**: Client dashboard instance for UI familiarization * **Test Data**: Predefined scenarios with known outcomes * **Event Simulation**: Full event flow testing capabilities ## Authentication Use your sandbox credentials exactly as you would in production: 1. Include your API key in the `x-api-key` header and your client ID in the `x-client-id` header 2. Use these headers for all API calls during testing ## Next Steps Once you understand the sandbox basics: 1. **[Test Scenarios](/guides/pay/geft/test-scenarios)**: Learn about specific test cases and user flows 2. **[Testing Best Practices](/guides/pay/geft/testing-best-practices)**: Implement automated testing 3. **[Production Readiness](/guides/pay/geft/production-readiness)**: Verify you're ready to go live ## Related Documentation * **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Implementation steps * **[Event Handling](/guides/pay/geft/event-handling)**: Frontend event integration * **[API Reference](/api/pay/endpoints/geft/index)**: Complete API documentation # Set Up Flinks Pay Using GEFT as the Payment Method Source: https://docs.flinks.com/guides/pay/geft/setup-flinks-pay Configure Flinks Pay with GEFT from onboarding and authentication through to production. Complete the following steps to set up Flinks Pay using GEFT: 1. Complete the standard Flinks Pay onboarding process and verification. 2. Meet applicable MSB requirements and receive service approval from your dedicated Relationship Manager. 3. Receive your production GEFT credentials (Username/Client ID and Password/Client Secret) and base URI. 4. Configure your GEFT integration following the steps below. 5. Implement session creation using the [/api/v2/sessions](/api/pay/endpoints/geft/sessions-initiate) endpoint for each payment request. 6. Track user progress through the payment flow using: * Frontend event listeners for real-time updates * Status polling via [/api/v2/sessions//status](/api/pay/endpoints/geft/sessions-status) * Webhook notifications for terminal status changes 7. Test your integration thoroughly using the [Sandbox Guide](/guides/pay/geft/sandbox-overview). 8. Go to production with your dedicated Technical Account Manager support. After your customer completes the GEFT flow, Flinks handles the guaranteed payment processing and settlement to your configured account. ## Step 1: Authentication All GEFT API requests that require authentication use an API key passed in the `x-api-key` header. Your API key will be provided during onboarding. ### Headers | Header | Value | Description | | -------------- | ------------------ | ------------------------------------ | | `x-api-key` | Your API key | Required for authenticated endpoints | | `x-client-id` | Your client ID | Identifies your client account | | `Content-Type` | `application/json` | Required for request bodies | ## Step 2: Create Session ### Endpoint ``` POST https://payments.flinksapp.com/api/v2/sessions ``` ### Required Fields | Field | Type | Description | | -------------------------- | ------- | ---------------------------------- | | `type` | String | Must be "EFT" for GEFT | | `direction` | String | Must be "DEBIT" for GEFT | | `options.guarantee.enable` | Boolean | Must be `true` for GEFT | | `payor.firstName` | String | User's first name (100 char limit) | | `payor.lastName` | String | User's last name (100 char limit) | ### Optional Fields | Field | Type | Description | | ---------------------------------- | ------- | -------------------------------------------------------------- | | `referenceId` | String | Your internal reference (100 char limit, strongly recommended) | | `amount` | Decimal | Payment amount (up to \$100,000, configurable per client) | | `currency` | String | "CAD" (default) | | `payor.email` | String | Email address (100 char limit) | | `payor.address` | Object | Address information | | `payee.account` | Object | Destination account details | | `notificationPreferences.language` | String | "EN" or "FR" | ### Example Request ```bash theme={null} curl --location 'https://payments.flinksapp.com/api/v2/sessions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: {{your_api_key}}' \ --header 'x-client-id: {{your_client_id}}' \ --data-raw '{ "referenceId": "USER12345", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "amount": 500.00, "options": { "guarantee": { "enable": true }, "notificationPreferences": { "language": "EN" } }, "payor": { "firstName": "John", "lastName": "Smith", "email": "john.smith@example.com", "address": { "addressLine1": "123 Main Street", "city": "Toronto", "postalCode": "M5V3A8", "province": "ON", "country": "CA" } }, "payee": { "account": { "accountNumber": "12345678", "transitNumber": "12345", "institutionCode": "999" } } }' ``` ### Response ```json theme={null} { "sessionId": "850750a4-3021-4061-ac03-a8d873aa4179", "referenceId": "USER12345" } ``` ## Step 3: Launch iFrame Once you have a `sessionId`, launch the GEFT user flow: ```html theme={null} ``` ### Event Listening Monitor frontend events to track user progress: ```html theme={null} ``` ## Step 4: Monitor Session Status ### Endpoint ``` GET https://payments.flinksapp.com/api/v2/sessions/{{sessionId}}/status ``` ### Example Request ```bash theme={null} curl --location 'https://payments.flinksapp.com/api/v2/sessions/{{sessionId}}/status' ``` ### Response ```json theme={null} { "sessionId": "aadd08f2-83ce-456d-84ed-c68cfed4ee7b", "referenceId": "USER12345", "amount": 500, "status": "Completed", "statusDetails": "EFT0301" } ``` ### Status Codes | Status | StatusDetails | Description | | --------- | ------------- | ---------------------------------------------- | | Initiated | EFT0101 | Session created, awaiting user start | | Completed | EFT0301 | Transaction scheduled, session fully completed | | Completed | EFT0302 | Bank account validated, awaiting PAD signature | | Failed | EFT0401 | Login failed - invalid credentials | | Failed | EFT0402 | Eligibility failed - no guarantee offered | | Failed | EFT0403 | Identity failed - user info mismatch | | Canceled | EFT0501 | Session canceled by API request | | Expired | EFT0601 | Session timed out | ## Step 5: Handle Completion ### Successful Completion (EFT0301) When status is "Completed" with "EFT0301": * Payment is guaranteed and scheduled * Funds will be settled according to EFT processing windows * No further action required ### Failed Scenarios **Guarantee Declined (EFT0402)** * Offer alternative payment methods * Transaction cannot proceed with GEFT **Identity Mismatch (EFT0403)** * User information doesn't match bank account * Session must be terminated **User Cancellation** * User exited flow without completing * Can retry with new session ## Destination Account Logic GEFT supports routing payments to different accounts: * **With payee object**: Funds settle to specified account * **Without payee object**: Funds settle to your default account (configured by Flinks) * **No payee + no default**: Request rejected with error ## Important Implementation Notes ### User Identity Matching * `firstName` and `lastName` must accurately reflect the bank account owner * Significant name differences will cause session failure (EFT0403) * Identity validation occurs after account connection ### Reference ID Best Practices * Use unique identifier for each transaction * Include in reconciliation and support requests * Appears in all status responses and reconciliation files ### Amount Handling * If amount provided: User cannot modify, "Enter amount" step is grayed out * If amount omitted: User enters amount in flow * Min/max limits configured at client level by Flinks ### Character Limits * Names: 255 characters * Email: 256 characters * Reference ID: 100 characters * Country: 2 characters (ISO country code) * Account Number: 7 to 12 digits * Transit Number: 5 digits * Institution Code: 3 digits ## Error Handling ```javascript theme={null} // Handle session status polling async function pollSessionStatus(sessionId) { const maxAttempts = 20; const pollInterval = 30000; // 30 seconds for (let i = 0; i < maxAttempts; i++) { try { const response = await fetch( `https://payments.flinksapp.com/api/v2/sessions/${sessionId}/status` ); const status = await response.json(); // Check for terminal states if (['Completed', 'Failed', 'Canceled', 'Expired'].includes(status.status)) { return status; } // Wait before next poll await new Promise(resolve => setTimeout(resolve, pollInterval)); } catch (error) { console.error('Status polling error:', error); } } throw new Error('Polling timeout - session status unknown'); } ``` ## Next Steps 1. **[Event Handling](/guides/pay/geft/event-handling)**: Implement comprehensive event tracking 2. **[Sandbox Guide](/guides/pay/geft/sandbox-overview)**: Test your integration 3. **[API Reference](/api/pay/endpoints/geft/index)**: Complete API documentation ## Testing Your Integration Use the sandbox environment with test scenarios: * **Happy1**: Successful flow * **Happy2**: Next-best-offer scenario * **Unhappy1**: Guarantee failure See the [Sandbox Guide](/guides/pay/geft/sandbox-overview) for complete testing procedures. # GEFT Test Scenarios Source: https://docs.flinks.com/guides/pay/geft/test-scenarios Review all available sandbox test scenarios for GEFT including happy paths and error cases. This guide covers all available test scenarios in the GEFT sandbox environment. Each scenario simulates different user behaviors and system responses. ## Happy Path Scenarios ### Happy Path 1 - Standard Success Flow Simulates a generic, error-free EFT flow representing the standard end-user journey. **Expected Behavior:** * Standard end-user flow with no errors * Full guarantee is offered automatically * Flow completes successfully without retries or interruptions **Test Data:** * **ReferenceId**: `Happy1` * **Username**: `Happy1` * **Password**: `Everyday` * **Customer**: Will Smith * **Amount**: \$100 **Session Request:** ```json theme={null} { "referenceId": "Happy1", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "options": { "guarantee": { "enable": true }, "notificationPreferences": { "language": "EN" } }, "payor": { "firstName": "Will", "lastName": "Smith", "email": "will.smith@gmail.com", "address": { "addressLine1": "123 Front Avenue", "city": "Toronto", "postalCode": "h2eh2e", "province": "ON", "country": "CA" } }, "payee": { "account": { "accountNumber": "9876541", "transitNumber": "60265", "institutionCode": "999" } } } ``` **User Flow:** 1. Add SessionId to iFrame → Flinks consent screen displayed 2. Institution Selection → User selects bank → Connection screen appears 3. Standard Flinks Connect Flow → Account selection and MFA (if applicable) 4. Funding Screen → User enters deposit amount 5. Review Details Screen → User reviews entered information 6. PAD Agreement Screen → Custom Pre-Authorized Debit consent for user signature ### Happy Path 2 - Next Best Offer Flow Simulates a scenario where the user cannot move the initially requested amount but receives a next-best-offer (reduced amount). **Expected Behavior:** * End-user flow proceeds without errors * Next-best-offer displayed when original funding amount cannot be processed * Full guarantee still offered after accepting new amount **Test Data:** * **ReferenceId**: `Happy2` * **Username**: `Happy2` * **Password**: `Everyday` * **Customer**: Steve Keith Diamond * **Amount**: \$1,000 **Session Request:** ```json theme={null} { "referenceId": "Happy2", "type": "EFT", "direction": "DEBIT", "currency": "CAD", "options": { "guarantee": { "enable": true }, "notificationPreferences": { "language": "EN" } }, "payor": { "firstName": "Steve Keith", "lastName": "Diamond", "email": "steve.diamond@example.com", "address": { "addressLine1": "123 street", "city": "Toronto", "postalCode": "h2eh2e", "province": "ON", "country": "CA" } }, "payee": { "account": { "accountNumber": "9876541", "transitNumber": "30265", "institutionCode": "999" } } } ``` ### Happy Path 3 - French Language Flow Tests French language interface for Quebec users. **Expected Behavior:** * Flow displayed in French * All messaging and UI elements in French * Standard successful completion **Test Data:** * **ReferenceId**: `Happy3` * **Username**: `Happy3` * **Password**: `Everyday` * **Customer**: Alex Rider (Quebec) ## Unhappy Path Scenarios ### Unhappy Path 1 - Guarantee Failure Simulates scenario where guarantee cannot be provided. **Expected Behavior:** * User completes authentication and account connection * Guarantee evaluation fails * `GUARANTEE_FAILED` event fired * User must use alternative payment method **Test Data:** * **ReferenceId**: `Unhappy1` * **Username**: `Unhappy1` * **Password**: `Everyday` * **Customer**: Joe Fails * **Expected Status**: `Failed` with `EFT0402` (Eligibility Failed) ## Interactive Test Scenarios ### Refuse Next Best Offer (NBO) 1. Use Happy2 scenario to trigger NBO 2. When NBO screen appears, click "Other funding options" 3. Expect `COMPONENT_OTHER_FUNDING_OPTIONS_SELECTED` event 4. Handle return to your application ### Accept NBO but Refuse PAD Agreement 1. Use Happy2 scenario to trigger NBO 2. Accept the reduced amount 3. When PAD agreement appears, reject it 4. Expect `COMPONENT_PAD_REJECTED` event 5. Handle payment method alternatives ### Cancel on Deposit Screen 1. Start any Happy scenario 2. Reach deposit amount screen 3. Cancel/close the flow 4. Expect `CLOSE` event 5. Handle user cancellation gracefully ### Name Mismatch Error 1. Create session with incorrect firstName/lastName 2. Use correct test credentials in flow 3. Expect identity validation failure 4. Status should be Failed with EFT0403 ## Testing Each Scenario For each test scenario: 1. **Create session** using the provided session request JSON 2. **Launch widget** with the returned sessionId 3. **Enter credentials** using the specified username/password 4. **Follow the expected flow** and verify expected behavior 5. **Monitor events** to ensure proper event handling 6. **Check final status** using the [/sessions/status](/api/pay/endpoints/geft/sessions-status) endpoint ## Next Steps * **[Testing Best Practices](/guides/pay/geft/testing-best-practices)**: Implement automated testing * **[Production Readiness](/guides/pay/geft/production-readiness)**: Verify you're ready to go live * **[Event Handling](/guides/pay/geft/event-handling)**: Understanding widget events # GEFT Testing Best Practices Source: https://docs.flinks.com/guides/pay/geft/testing-best-practices Code examples and automation strategies for comprehensive GEFT integration testing. This guide provides code examples and automation strategies for comprehensive GEFT testing. ## Session Management ### Basic Testing Workflow ```javascript theme={null} // Example testing workflow async function testGeftScenario(scenarioName) { try { // 1. Authenticate const authResponse = await authenticate(); // 2. Create session with test data const sessionData = getTestScenarioData(scenarioName); const session = await createSession(sessionData, authResponse.access_token); // 3. Monitor events setupEventMonitoring(session.sessionId); // 4. Launch iframe launchGeftIframe(session.sessionId); // 5. Poll status const finalStatus = await pollSessionStatus( session.sessionId, authResponse.access_token ); return { scenario: scenarioName, success: finalStatus.status === 'Completed', status: finalStatus }; } catch (error) { console.error(`Test failed for ${scenarioName}:`, error); throw error; } } ``` ### Test Data Management ```javascript theme={null} function getTestScenarioData(scenario) { const scenarios = { 'Happy1': { referenceId: 'Happy1', payor: { firstName: 'John', lastName: 'Doe', email: 'j.doe@gmail.com' } }, 'Happy2': { referenceId: 'Happy2', payor: { firstName: 'Steve', lastName: 'Diamond', email: 'steve.diamond@example.com' } }, 'Unhappy1': { referenceId: 'Unhappy1', payor: { firstName: 'Joe', lastName: 'Fails', email: 'joe.fails@example.com' } } }; return { ...scenarios[scenario], type: 'EFT', direction: 'DEBIT', currency: 'CAD', options: { guarantee: { enable: true }, notificationPreferences: { language: 'EN' } } }; } ``` ## Event Testing ### Event Monitoring Setup ```javascript theme={null} function setupEventMonitoring(sessionId) { const events = []; window.addEventListener('message', function(e) { if (e.data && e.data.step) { events.push({ timestamp: new Date(), event: e.data }); console.log('Test Event:', e.data); // Verify expected events for scenario validateEventSequence(events); } }); return events; } ``` ### Event Validation ```javascript theme={null} function validateEventSequence(events) { const eventSteps = events.map(e => e.event.step); // Validate event order for successful flow const expectedSuccess = [ 'APP_INITIATED', 'INSTITUTION_SELECTED', 'SUBMIT_CREDENTIAL', 'ACCOUNT_SELECTED', 'COMPONENT_DEPOSIT_CONTINUE', 'GUARANTEE_OFFERED', 'COMPONENT_PAD_DOWNLOADED', 'SUCCESS' ]; // Check if events follow expected pattern let expectedIndex = 0; for (const step of eventSteps) { if (step === expectedSuccess[expectedIndex]) { expectedIndex++; } } return expectedIndex === expectedSuccess.length; } ``` ## Automated Testing ### Full Test Suite ```javascript theme={null} // Run all test scenarios async function runFullTestSuite() { const scenarios = [ 'Happy1', 'Happy2', 'Happy3', 'Unhappy1', 'Unhappy2', 'Unhappy3' ]; const results = []; for (const scenario of scenarios) { try { const result = await testGeftScenario(scenario); results.push(result); console.log(`✓ ${scenario} passed`); } catch (error) { results.push({ scenario, success: false, error: error.message }); console.log(`✗ ${scenario} failed:`, error.message); } } return results; } ``` ### Parallel Testing ```javascript theme={null} // Run multiple scenarios in parallel async function runParallelTests(scenarios) { const promises = scenarios.map(scenario => testGeftScenario(scenario)); try { const results = await Promise.allSettled(promises); return results.map((result, index) => ({ scenario: scenarios[index], success: result.status === 'fulfilled', data: result.value || result.reason })); } catch (error) { console.error('Parallel test execution failed:', error); throw error; } } ``` ## Authentication Testing ### API Key Configuration ```javascript theme={null} // Configure API authentication headers const API_CONFIG = { baseUrl: 'https://payments-uat.flinksapp.com', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.GEFT_API_KEY, 'x-client-id': process.env.GEFT_CLIENT_ID } }; async function createSession(sessionData) { const response = await fetch(`${API_CONFIG.baseUrl}/api/v2/sessions`, { method: 'POST', headers: API_CONFIG.headers, body: JSON.stringify(sessionData) }); if (!response.ok) { throw new Error(`Session creation failed: ${response.status}`); } return response.json(); } ``` ## Status Polling ### Robust Polling Implementation ```javascript theme={null} async function pollSessionStatus(sessionId, maxAttempts = 20) { const pollInterval = 30000; // 30 seconds for (let i = 0; i < maxAttempts; i++) { try { const response = await fetch( `https://payments-uat.flinksapp.com/api/v2/sessions/${sessionId}/status` ); if (!response.ok) { throw new Error(`Status check failed: ${response.status}`); } const status = await response.json(); // Check for terminal states if (['Completed', 'Failed', 'Canceled', 'Expired'].includes(status.status)) { return status; } // Wait before next poll await new Promise(resolve => setTimeout(resolve, pollInterval)); } catch (error) { console.error('Status polling error:', error); if (i === maxAttempts - 1) throw error; } } throw new Error('Polling timeout - session status unknown'); } ``` ## Error Handling ### Comprehensive Error Testing ```javascript theme={null} async function testErrorHandling() { const errorTests = [ { name: 'Invalid credentials', test: () => authenticateWithWrongCredentials(), expectedError: 'Unauthorized' }, { name: 'Malformed session data', test: () => createSessionWithInvalidData(), expectedError: 'Bad Request' }, { name: 'Network timeout', test: () => testWithNetworkDelay(), expectedError: 'Timeout' } ]; const results = []; for (const errorTest of errorTests) { try { await errorTest.test(); results.push({ test: errorTest.name, success: false, error: 'Expected error was not thrown' }); } catch (error) { const success = error.message.includes(errorTest.expectedError); results.push({ test: errorTest.name, success, error: success ? null : `Unexpected error: ${error.message}` }); } } return results; } ``` ## Performance Testing ### Load Testing ```javascript theme={null} async function performanceTest() { const concurrentSessions = 5; const sessionPromises = []; console.log(`Starting ${concurrentSessions} concurrent sessions...`); for (let i = 0; i < concurrentSessions; i++) { sessionPromises.push( measureSessionTime(`Happy1_${i}`) ); } const results = await Promise.allSettled(sessionPromises); const successful = results.filter(r => r.status === 'fulfilled'); const failed = results.filter(r => r.status === 'rejected'); console.log(`Performance results:`); console.log(`Successful: ${successful.length}`); console.log(`Failed: ${failed.length}`); if (successful.length > 0) { const times = successful.map(r => r.value.duration); const avgTime = times.reduce((a, b) => a + b, 0) / times.length; console.log(`Average completion time: ${avgTime}ms`); } } async function measureSessionTime(referenceId) { const startTime = Date.now(); try { const result = await testGeftScenario('Happy1', { referenceId }); return { success: true, duration: Date.now() - startTime, result }; } catch (error) { return { success: false, duration: Date.now() - startTime, error: error.message }; } } ``` ## CI/CD Integration ### Test Runner for CI ```javascript theme={null} // test-runner.js - For use in CI/CD pipelines const { testGeftScenario, runFullTestSuite } = require('./geft-tests'); async function ciTestRunner() { console.log('Starting GEFT integration tests...'); try { const results = await runFullTestSuite(); const passed = results.filter(r => r.success).length; const failed = results.filter(r => !r.success).length; console.log(`Tests completed: ${passed} passed, ${failed} failed`); if (failed > 0) { console.error('Failed tests:', results.filter(r => !r.success)); process.exit(1); } console.log('All tests passed!'); process.exit(0); } catch (error) { console.error('Test suite failed:', error); process.exit(1); } } if (require.main === module) { ciTestRunner(); } module.exports = { ciTestRunner }; ``` ## Next Steps * **[Production Readiness](/guides/pay/geft/production-readiness)**: Verify you're ready to go live * **[Test Scenarios](/guides/pay/geft/test-scenarios)**: Review all available test cases * **[Event Handling](/guides/pay/geft/event-handling)**: Understanding widget events # GEFT Widget Source: https://docs.flinks.com/guides/pay/geft/widget Embed the GEFT widget iframe to guide users through the guaranteed payment flow. ## What your customers will see The GEFT widget is embedded into your site as an iframe that guides users through the guaranteed payment flow. Users will experience a seamless payment process with real-time guarantee decisions and secure bank account connection. The GEFT widget flow includes: 1. **Institution Selection** - Users select their financial institution 2. **Bank Authentication** - Secure login to their bank account 3. **Account Selection** - Choose the account for payment 4. **Amount Confirmation** - Enter or confirm payment amount 5. **Guarantee Evaluation** - Real-time guarantee decision by Flinks 6. **PAD Agreement** - Sign Pre-Authorized Debit agreement 7. **Payment Completion** - Guaranteed payment processing ## Launching the GEFT Widget Once you have a sessionId from the [/Sessions/Initiate](/api/pay/endpoints/geft/sessions-initiate) endpoint, launch the GEFT widget: ```html theme={null} ``` ### Widget URL Structure The GEFT widget URL follows this pattern: ``` https://payments.flinksapp.com/app/?sessionId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ``` Where: * **payments.flinksapp.com** - Production environment URL * **xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx** - The session ID obtained from session creation For sandbox testing, use `payments-uat.flinksapp.com` instead. ## Supported Browsers The GEFT widget is supported by: * Chrome * Safari * Firefox * Microsoft Edge * Opera ## Widget Configuration Widget behavior is controlled through session creation parameters rather than URL parameters. Configure your GEFT widget by setting options in the [/Sessions/Initiate](/api/pay/endpoints/geft/sessions-initiate) request: ### Language Settings ```json theme={null} { "options": { "notificationPreferences": { "language": "EN" // or "FR" } } } ``` ### Amount Handling ```json theme={null} { "amount": 500.00 // Pre-set amount (optional) } ``` If amount is omitted, users will enter the amount in the widget flow. ### Consent Screen ```json theme={null} { "options": { "showConsentScreen": true // or false } } ``` Controls whether to display the Flinks consent screen or use your own. ## Widget States and User Experience ### Initial Loading When the widget loads, users see the institution selection screen where they choose their bank. ### Authentication Flow After selecting their institution, users are redirected to their bank's login page for secure authentication. ### Guarantee Decision Once authenticated, Flinks evaluates the transaction in real-time and provides either: * **Guarantee Approval** - Payment can proceed with Flinks assuming EFT risk * **Guarantee Decline** - Alternative payment methods should be offered ### PAD Agreement For approved guarantees, users must sign a Pre-Authorized Debit agreement before payment processing begins. ### Completion After successful completion, the widget indicates payment success and can redirect users back to your application. ## Integration Best Practices ### Widget Sizing * **Minimum width**: 400px * **Recommended height**: 600px * **Responsive design**: Use percentage widths for mobile compatibility ### Error Handling Implement proper error handling for various scenarios: * Network connectivity issues * Session timeouts * User abandonment * Guarantee failures ### User Experience * Show loading indicators during widget initialization * Provide clear messaging about the guarantee process * Offer alternative payment methods for guarantee failures * Implement session timeout handling ## Event Monitoring Monitor widget events to track user progress and handle different scenarios. See [Event Handling](/guides/pay/geft/event-handling) for detailed event documentation and implementation examples. Common events to monitor: * `APP_INITIATED` - Payment flow initiated * `INSTITUTION_SELECTED` - User selected their bank * `GUARANTEE_OFFERED` - Payment can be guaranteed * `SUCCESS` - Payment completed successfully * `GUARANTEE_FAILED` - Guarantee declined ## Testing Your Widget Use the sandbox environment to test your GEFT widget integration: 1. Use sandbox credentials and base URI 2. Test with various reference IDs to trigger different scenarios 3. Verify event handling for all possible outcomes 4. Test on different devices and browsers See the [Sandbox Guide](/guides/pay/geft/sandbox-overview) for complete testing procedures and test scenarios. ## Related Documentation * **[Setup Guide](/guides/pay/geft/setup-flinks-pay)**: Complete implementation walkthrough * **[Event Handling](/guides/pay/geft/event-handling)**: Widget event tracking * **[Sandbox Guide](/guides/pay/geft/sandbox-overview)**: Testing procedures * **[API Reference](/api/pay/endpoints/geft/index)**: Backend API documentation # Getting Started with Flinks Pay Source: https://docs.flinks.com/guides/pay/getting-started Complete the following steps to set up Flinks Pay. 1. Set up your environments. 2. Set up your API connection. 3. Add the Flinks Connect iframe to your page. 4. Depending on the payment method you are using, complete one of the following: * [Set up Flinks Pay using E-Transfer](./e-transfer/setup-flinks-pay). * [Set up Flinks Pay using EFT Debit](./eft/setup-flinks-pay). 5. Go to production.

Flinks Pay is currently only available in Canada.

## Set up your environments Flinks provides two environments to you when you start the integration process: * **Sandbox:** a testing space that you use to set up your Flinks integration and test that it's working correctly. * **Production:** a live production space that allows you to connect real accounts and start using your Flinks product. ### Set up the sandbox environment Flinks provides you with a Sandbox environment that you can use to try out our products. Use it to test your integration and confirm everything is working as expected.

Flinks Pay is currently only available in Canada.

Here's what to do with it: 1. When you're ready to get started, contact your Flinks Representative and ask them to set you up with a test environment. 2. Flinks provides you with a test institution, Flinks Capital, that you can use for testing purposes. For security and privacy reasons, you can't make live connections to real financial institutions in this environment. 3. Build your integration and connect to our APIs using the Sandbox environment. 4. When you're ready, move over to the Production environment. ### Set up the production environment Ask your Flinks Representative to set you up with a private Production environment in advance, so that you're ready to go-live when testing is complete. When the development and testing process in the Sandbox environment is complete, it's time to move your Flinks configuration over to the Production environment. Make sure that all of your API calls and iframe URLs are pointing to your private Production environment and not the Sandbox environment. Once you go live, you can start connecting to real accounts and experience the full Flinks service. You can still make requests to Flinks Capital in the Production environment at no cost, but you'll receive an invoice for all successful live requests. ## Set Up Your API Connection To set up your API Connection with Flinks, you will have to make your first API call before receiving data. The following sections will walk you through this process. ### Make your first API call This is the first API request that needs to be executed whenever you want to retrieve data from a connected account. Flinks API needs to confirm the validity of the request and to know which account you want to retrieve data from. To do so, you will exchange your `loginId` for a new `requestId`. For that, the [/Authorize](../../api/authorize/endpoints/authorize) endpoint needs to be called using a POST method, and it requires a `loginId` and the parameter MostRecentCached:true. To make it more concrete, let's suppose that you are opening a new session to retrieve the data for the `loginId: 5e115eac-1209-4f19-641c-08d6d484e2fe`: ```curl curl theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/Authorize \ -H 'Content-Type: application/json' \ -d '{ "LoginId":"5e115eac-1209-4f19-641c-08d6d484e2fe", "MostRecentCached":true }' ``` This is how your response will look like: ```json json{ theme={null} "Links": [...], "HttpStatusCode": 200, "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` The `loginId` (`5e115eac-1209-4f19-641c-08d6d484e2fe`) was successfully exchanged for a requestid (1243c283-e0ca-4fda-a5e4-343068430190). Now that the session is active, we have everything we need to place a call to retrieve financial data. ### Receive data from us The next step is for your server to send a request for data. This request uses the [/GetAccountsDetail](../../api/connect/endpoints/account-linking/get-accounts-detail) endpoint, which also needs to be made using a POST method, and only requires the acquired `requestId`. Continuing our example using our `requestId` (`1243c283-e0ca-4fda-a5e4-343068430190`), it looks like this: ```curl curl theme={null} curl -X POST \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/GetAccountsDetail \ -H 'Content-Type: application/json' \ -d '{ "RequestId":"1243c283-e0ca-4fda-a5e4-343068430190" }' ``` The most common first response to get in a request for data returns an `HTTP 202 FlinksCode:OPERATION_PENDING`, meaning that the data you are requesting is still being processed. Here's an example of a typical API response for data pending processing: ```json json theme={null} { "FlinksCode": "OPERATION_PENDING", "Links": [...], "HttpStatusCode": 202, "Message": "Your operation is still processing", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` Because of this, your server needs to expect and be able to handle this response and proceed-poll the request (link to async poll code samples) to receive the data, which is described in the next step.

When sending requests for data...

Your integration must handle the 202 OPERATION\_PENDING response.
### Receive pending data For requests that are still pending for data processing, only the requestId is needed, but the parameter goes directly into the API URL as it's a `GET` request. While you receive the response `HTTP 202 FlinksCode:OPERATION_PENDING`, you need to keep calling this endpoint every 10 seconds for a maximum of 30 minutes. ```curl Curl theme={null} curl -X GET \ https://toolbox-api.private.fin.ag/v3/43387ca6-0391-4c82-857d-70d95f087ecb/BankingServices/GetAccountsDetailAsync/1243c283-e0ca-4fda-a5e4-343068430190 \ -H 'Content-Type: application/json' ```

If you're still receiving 202 OPERATION PENDING

In case your data is still pending, you need to call this endpoint every 10 seconds for a maximum of 30 minutes. This doesn't mean that your request is going to take that long, but this global timeout is required to avoid infinite loops.
Once your data is done being processed, the API will respond with an HTTP 200 and a JSON payload containing all the data we collected from the financial institution in a standard format. Your app server will be ready to start handling it according to your use case. ```curl Curl theme={null} { "HttpStatusCode": 200, "Accounts": [ { "Transactions": [ { "Date": "2019-04-22", "Code": null, "Description": "national money", "Debit": 12.08, "Credit": null, "Balance": 49993.96, "Id": "633b976e-c713-4b59-9717-3ec407bdde8b" }, { "Date": "2019-04-21", "Code": null, "Description": "TrxChe@Cr12.07", "Debit": null, "Credit": 12.07, "Balance": 50006.04, "Id": "ac25ab22-2828-4174-9653-23bb8918b7c4" } ], "TransitNumber": "77777", "InstitutionNumber": "777", "OverdraftLimit": 0, "Title": "Chequing CAD", "AccountNumber": "1111000", "Balance": { "Available": null, "Current": 49993.96, "Limit": null }, "Category": "Operations", "Type": "Chequing", "Currency": "CAD", "Holder": { "Name": "John Doe", "Address": { "CivicAddress": "1275 avenue des Canadiens-de-Montréal", "City": "Montréal", "Province": "QC", "PostalCode": "H3B 5E8", "POBox": null, "Country": "CA" }, "Email": "johndoe@flinks.com", "PhoneNumber": "(514) 333-7777" }, "Id": "ae1dac72-70da-4626-fed8-08d682e1ff4a" }, {...} ], "Login": { "Username": "Greatday", "IsScheduledRefresh": false, "LastRefresh": "2019-05-09T13:47:46.5227901", "Type": "Personal", "Id": "5e115eac-1209-4f19-641c-08d6d484e2fe" }, "Institution": "FlinksCapital", "RequestId": "1243c283-e0ca-4fda-a5e4-343068430190" } ``` ## Add the Flinks Connect iframe to your page 1. Play around with the [Flinks Connect widget](../connect/flinks-connect/widget#flinks-connect-widget) and determine how you want to set it up. This is what your end-users will interact with to link their bank accounts. 2. Generate your code snippet. To do this with the Flinks Connect widget, select Generate. 3. Embed the code snippet into your web page, application, or webview. This adds an iframe with Flinks Connect inside of it: ```html html theme={null} ``` In the example above, we are using the Sandbox environment. Do all of your configurations and testing in this environment, then change it to your production environment before going live. If you are integrating the Flinks Connect iframe with React Native, see the [React Native setup instructions](/guides/connect/flinks-connect/add-flinks-connect-iframe#react-native-integration). # Send and Receive Money Source: https://docs.flinks.com/guides/pay/send-and-receive-money FlinksPay is a payment processing service that allows your customers to transfer funds to you using Interac e-Transfer Request Money. It provides a seamless transaction process for both you as a business and for your customers. FlinksPay allows your customers to make payments from almost any bank account in Canada, with funds guaranteed almost immediately. ## Payment methods we support We support the following payment methods: | **PAYMENT METHOD** | **DESCRIPTION** | | :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | EFT | EFTs allow your customers to make recurring or bulk payments, such as payments for payroll or bills, by linking their bank account to their Flinks Wallet. Flinks Guaranteed EFT reduces the inefficiencies of traditional EFTs by offering secure, real-time account funding. | | E-Transfer | Allow your customers to make a payment by using Interact e-Transfer Request For Money. With e-Transfer, customers can make quick, one-off payments. E-Transfer provides security and flexibility. | # Set Up Pay Source: https://docs.flinks.com/guides/pay/set-up-pay This page will provide the general steps towards setting up Pay in your integration. ## Choose a payment method Before setting up Pay, you need to decide which payment method is best for you. To read about our payment methods, follow the links below: * [EFT Debit](./eft/eft-debit) * [E-Transfer](./e-transfer/e-transfer) ## Complete the general integration steps Complete the following to set up your product: Set up your environments. Connect to our APIs. Complete your product-specific integration steps (you can find these in the following section). Access your Flinks Dashboard. Complete testing. ## Complete integration steps that are specific to your payment method To complete integration for EFT Debit or E-Transfer, navigate to the links below: * If you've chosen EFT as your payment method, see [Set up Flinks Pay using EFT Debit](./eft/setup-flinks-pay). * If you've chosen E-Transfer as your payment method, see [Set up Flinks Pay using E-Transfer](./e-transfer/setup-flinks-pay). # Troubleshooting Payments Source: https://docs.flinks.com/guides/pay/troubleshooting Troubleshoot payment status issues and EFT return codes in Flinks Pay. When a payment fails or encounters an issue, use the following steps to diagnose the problem. ## Checking payment status in the Dashboard 1. Log in to the [Flinks Dashboard](/guides/dashboard/getting-started). 2. Navigate to **Payments**. 3. Click the **Error** tab to view failed payments. 4. Select a payment to view its details, including the `paymentStatus` and `statusDetails` fields. ## Checking payment status via API Use the [/PaymentRequests GET](/api/pay/endpoints/e-transfer/get-payment-requests) endpoint to check the status of a payment: ```bash theme={null} curl -X GET \ https://{baseurl}/api/v1/paymentrequests/{requestId} \ -H 'Authorization: Bearer {access_token}' \ -H 'BaseURI: {instance}' ``` ## Payment status reference | Status | Description | | :----------- | :------------------------------------------------------------------- | | `Initiated` | Payment request received and ready for processing | | `Processing` | User is completing the transaction | | `Accepted` | User accepted the payment; funds flow has started (funds guaranteed) | | `Processed` | Transaction processed; awaiting settlement | | `Settled` | Funds transfer completed to your account | | `Cancelled` | Payment cancelled before being initiated | | `Expired` | User did not action the request in time | | `Declined` | User declined the payment at their financial institution | | `Failed` | Payment request failed (check `statusDetails` for reason) | ## Debugging with browser DevTools For advanced debugging of payment flow issues: 1. Open your browser's Developer Tools (F12 or Ctrl+Shift+I). 2. Go to the **Network** tab. 3. Search for `SearchLiveTransactionHistories` in the network requests. 4. Inspect the response to find the `paymentStatus` and `statusDetails` fields. ## EFT return codes EFT transactions can fail with a Payments Canada return code (CPA005 standard, plus Rule H1 codes for PAD disputes). Each code maps to a specific operational decision: cancel the schedule, contact the user, review before acting, or escalate. See the [EFT Failure Scenarios](/guides/pay/eft/failure-scenarios) playbook for the full list of codes, what each one means, the impact on your schedule, and the exact next steps to take. Any return code flagged as a **PAD Dispute** triggers an automatic recall of funds while the dispute is under review. Contact Flinks Payments Support immediately. Do not wait. ## Common issues | Problem | Possible cause | Solution | | :----------------------------------- | :---------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | | Payment stuck in `Processing` | User hasn't completed the flow | Follow up with the customer or check if the session expired | | `Failed` with `failed_name_matching` | Name mismatch between session and bank | Create a new session with the correct name | | Payment `Expired` | User didn't action the e-transfer request | Initiate a new payment request | | EFT return code | Bank rejected the EFT transaction | Look up the code in [EFT Failure Scenarios](/guides/pay/eft/failure-scenarios) and follow the decision (cancel, retry, review, or escalate) | # Security & Privacy Source: https://docs.flinks.com/guides/security Learn about Flinks security practices, compliance certifications, and how we protect your data. Flinks is built with security at its core. This page outlines our compliance certifications, encryption practices, and data privacy approach. ## Compliance ### SOC 2 Flinks maintains **SOC 2 Type II** compliance, which verifies that our systems and processes meet strict standards for: * **Security**: Protection against unauthorized access * **Availability**: Systems are operational and accessible * **Confidentiality**: Sensitive data is protected from disclosure SOC 2 audits are conducted annually by an independent third-party auditor. Contact your Flinks Representative to request our latest SOC 2 report. ## Encryption ### In transit All data transmitted between your systems and Flinks is encrypted using **TLS 1.2+** (Transport Layer Security). This includes: * API requests and responses * Webhook payloads * Flinks Connect iframe communication ### At rest All data stored by Flinks is encrypted at rest using industry-standard encryption algorithms. This applies to: * User credentials * Financial data (account details, transactions) * Uploaded documents ## Data privacy Flinks adheres to strict data privacy practices to protect end-user financial information: * **Minimal data collection**: We only collect and store data that is necessary to provide the requested service * **Access controls**: Data access is restricted to authorized systems and personnel * **Data retention**: Financial data is retained only for the duration required by your configuration * **No selling of data**: Flinks does not sell end-user financial data to third parties ## Frequently asked questions ### Why do my users have to enter their bank password? When using Flinks Connect (credential-based access), users enter their online banking credentials to authorize data sharing. This is a common and secure pattern used across the financial data industry. Here's how it works: * **Credentials are encrypted** in transit and at rest: they are never stored in plain text * **Credentials are never shared** with your application: only the resulting financial data is delivered to you * **Flinks acts as a secure intermediary** between the user and their financial institution * **Users can revoke access** at any time by contacting Flinks or their financial institution For institutions that support Open Banking, [Flinks Outbound](/guides/outbound-overview) uses an OAuth-based consent flow where users authenticate directly with their bank and never share credentials with Flinks. ### Is Flinks PCI compliant? Flinks does not process credit card payments and therefore does not require PCI DSS compliance. Our security practices for handling financial credentials and data are covered under our SOC 2 certification. ## Privacy policy For complete details on how Flinks handles personal information, see our [Privacy Policy](https://www.flinks.com/privacy-policy). ## Related resources * [Getting Started](/guides/getting-started/about-flinks) * [Flinks Connect Overview](/guides/connect/flinks-connect/flinks-connect) * [Outbound Overview](/guides/outbound-overview) # Contact Flinks Source: https://docs.flinks.com/guides/support/contact-flinks Find help in the documentation or create a support ticket through the Flinks Support Portal. ## Contact Flinks Most questions can be solved quickly by browsing our [Documentation](../../api-home) or the guides in this documentation site. If you can’t find what you’re looking for, visit the [Support Portal](https://help.flinks.com/support/login) to create a ticket. # Upload Capabilities & Limits Source: https://docs.flinks.com/guides/upload/capabilities Processing times, accuracy, file limits, and supported formats for Flinks Upload. Flinks Upload processes bank statements and void cheques, extracting structured financial data with built-in fraud detection. This page covers what Upload can do and its operational limits. ## Processing times Upload offers two processing modes: | Mode | Typical time | Description | | :----------- | :--------------- | :----------------------------------------------------------------------------------------- | | **Instant** | 2 to 5 minutes | Automated extraction with machine learning. Best for real-time onboarding flows. | | **Complete** | 15 to 25 minutes | Includes Human-in-the-Loop review for maximum accuracy. Recommended for lending decisions. | Median processing time across all uploads is under 10 minutes. Processing time depends on document complexity (number of pages, transaction volume) and file quality. Image-based PDFs take longer than parsable PDFs. ## Accuracy Flinks Upload achieves **>99% field-level accuracy** for data extraction, supported by a Human-in-the-Loop review process that catches and corrects edge cases. Extracted fields include: * Account holder name and address * Account number * Statement period * Opening and closing balances * Individual transactions (date, description, debit/credit, balance) ## File limits | Limit | Value | | :----------------------- | :--------------------------------------------------------- | | **Max files per upload** | 24 files | | **Max total size** | 180 MB across all files | | **Max per file** | 20 MB | | **Files per upload** | Multiple files count as a single upload for quota purposes | Submitting multiple files in a single upload counts as **one upload** against your quota. You do not need to submit files individually. ## Supported file formats | Format | Supported | | :------------------------- | :-------- | | PDF (parsable: text-based) | Yes | | PDF (image-based: scanned) | Yes | | JPEG | Yes | | PNG | Yes | | BMP | Yes | | TIFF | Yes | ### Parsable vs image-based PDFs * **Parsable PDFs** contain selectable text (e.g., downloaded directly from a bank's website). These process faster and with higher accuracy. * **Image-based PDFs** are scanned documents where text is embedded as an image. These require OCR (optical character recognition) and may take longer to process. Encourage your users to download bank statements directly from their financial institution's website rather than scanning printed copies. Digitally generated PDFs produce better extraction results. ## Document types ### Bank statements Flinks Upload supports bank statements for: * Chequing accounts * Savings accounts * Credit card accounts Extracted data is returned via the [`/GetAccountsDetail`](/api/connect/endpoints/account-linking/get-accounts-detail) endpoint in the same format as data collected through Flinks Connect. ### Void cheques Flinks Upload also supports void cheque processing, which extracts: * Account holder name * Institution number * Transit number * Account number Void cheque data is returned via a different endpoint than bank statement data. Fraud detection is **not available** for void cheques. Contact your Flinks Representative for void cheque endpoint details. ## Countries Flinks Upload is available in **Canada** and the **United States**. ## Related resources * [Getting Started with Upload](/guides/upload/getting-started) * [Upload a File](/guides/upload/upload-a-file) * [Fraud & Verification](/guides/upload/fraud-verification) * [Upload API Reference](/api/upload/getting-started) # Document Processing Source: https://docs.flinks.com/guides/upload/document-processing Process, authenticate, and extract data from uploaded bank statements with built-in fraud detection. Onboard more users by offering to upload bank statements alongside standard bank linking. Flinks document processing and authentication is a feature that you can enable in Flinks Connect and in your Flinks Dashboard to process, authenticate, and extract data from bank statements. If you’re already using Flinks, you’ll get the data in the same format you are used to via the Flinks Dashboard or API. Gif showing a user uploading bank statements in Flinks Connect. **Use this feature if you want to:** * **Increase your application volume** and **reduce drop-off** by giving users a faster, simpler way to share their financial data. * Save time and costs associated with manually reviewing statements. * Automate your current document-processing flows. * Add an extra layer of security that includes robust fraud detection with actionable verdicts: **Trust, Normal, Warning, or High Risk** documents, allowing you to be confident in the data. ## How it works Flinks offers two ways to enable document uploads in your flow: **Primary** or only as a **Fallback**. However, you can also send your users a direct link to an upload only flow. You must choose one of these configurations. ### Upload bank statements in Flinks Connect - Primary option When set as the Primary option, users will see the choice to either link their bank account or upload bank statements right after selecting their institution. Additionally, the fallback logic (e.g., if login fails or the institution isn't listed) is also enabled under the Primary configuration. This ensures that users can always upload statements if direct bank connection doesn't work. **In other words, the "fallback" behaviour is built into the Primary setting.** Series of images showing a user going through the primary upload option. With the Primary option, the "Select a connection method" screen is enabled. ### Upload files as a Fallback option With Fallback enabled, the "connection method" screen is disabled and users are first required to attempt to link their bank. If they encounter an issue, such as a failed login, wrong credentials, inactivity, or an unlisted institution, only then does the option to upload bank statements appear. The user can't find their Institution when searching in the institution list. Image showing the user going through the fallback option. The user searches for their institution, but it does not appear, so the option to upload bank statements is made available. Upload statements when the user doesn't remember their username or password. Image depicting the fallback option. The user types an invalid username, and the option to upload bank statements appears on the error screen. With fallback enabled, your users will also see the option to upload after inactivity. Image showing the fallback option. The user times out on the Flinks Connect login screen, and a pop-up appears asking whether the user would like to upload bank statements or connect to their bank. ### Send users a direct link to upload documents By adding `/Upload` to your Flinks Connect URL, you can also send your users to an upload-only flow. By using parameters in Flinks Connect, you can customize the wording to specify how many bank statements you want to collect from users. Image showing the upload-only option screen. The page shows the option to upload bank statements along with a back button, and no other options are available. ## Enable Upload in your Flinks Connect integration Flinks Upload is a feature that you can enable in both Flinks Connect and in your Flinks Dashboard which processes and extracts data from a bank statement. Before following the instructions below, ensure that you have already [set up Flinks Connect](../connect/getting-started). Then, let your Flinks Representative know that you want to start using Flinks Upload. They will walk you through the following steps: 1. Choose which upload screens you want to enable. For more information about the screens you can choose from, see [How Upload works](./upload-a-file#upload-a-file). 2. Choose how you want to receive an alert when a fraud signal is detected in an uploaded file. You can: * Be alerted via a notification * Set up Webhooks to deliver fraud alerts to you automatically 3. (Optionally) Customize the text on the upload screen. 4. (Optionally) Set up even listeners if you want to take action on any of the following JavaScript events: - Upload component is loaded (`COMPONENT_LOAD_UPLOADconf`) * Files are added or removed (`UPLOAD_INPUT_CHANGE`) * A fraud signal is triggered by our statement validation service (`UPLOAD_INVALID_FILE`) * User clicks the Continue button in Flinks Connect (`UPLOAD_SUBMIT`) * Upload fails (`UPLOAD_ERROR`) 5. (Optionally) Call the [/FraudAnalysis](../../api/upload/endpoints/fraud/fraud-analysis) endpoint to check if any fraud signals were detected. For more information about why you may want to set up an event listener, speak to your Flinks representative. Once you're set up, you can start uploading files and receiving your data. ## Upload a file Flinks Upload is a feature that you can enable in Flinks Connect and in your Flinks Dashboard that processes and extracts data from a document. there are two ways that you can upload a file using Flinks Upload: * Upload a file through your Flinks Dashboard * Upload a file through Flinks Connect You can upload files for a singular customer at a singular financial institution. If you have multiple customer files to upload, complete one upload per customer. If a customer has files from multiple financial institutions, complete one upload per financial institution. For more information about each method, review the following sections: ### Upload a file through your Flinks Dashboard Complete the following steps to upload a file in your Flinks Dashboard: Pop-up requesting the user to import bank statements and/or a void cheque. The pop-up includes an upload button, a field to name the request, a cancel button, and a continue button. *Click on "import PDF/Image" to upload documents via the Dashboard* 1. In the Dashboard, navigate to the Insights screen, then go to the External Data tab. 2. Select Import PDF. 3. Select the file(s) you want to upload. You must select files for a singular customer at a singular financial institution. \[componentCallout component] \[componentCallout component] 4. Enter a unique identifier to describe the file(s) you've selected, such as a customer name. This is used to identify the files when we deliver the extracted data to you. 5. Select Import Files. You'll see a success message if we successfully receive your file(s). If you receive an error message, try uploading the files again at a later time. 6. Review the upload status to check if the data is finished processing. Data is typically ready to review within 10 minutes of uploading, but in some cases it may take up to four hours to process. \[componentCallout component] ### Upload a file through Flinks Connect Complete the following steps to upload a file in Flinks Connect. Screenshot showing the different steps while uploading *Primary upload flow in Flinks Connect* 1. Depending on the screen you see, complete one of the following: * If you are on the Upload PDF Statements screen, continue to step 2. * If you are seeing the upload option after experiencing a bad connection, select Upload PDF statements. * If you are being asked to choose a connection option, select Upload bank statements. 2. Select Browse and then select the file(s) you want to upload. 3. Select Continue. You'll see a message if we successfully receive your file(s). 4. Review the upload status to check if the data is finished processing. Data is typically ready to review within 10 minutes of uploading, but in some cases it may take up to four hours to process. For more information about how to review processed data, see [Receive Your Data](./receive-your-data). ## Check for fraud Flinks checks every bank statement that is uploaded through [Flinks Upload](./flinks-upload) for several signs of fraud. Complete the following steps to check the verification results: 1. In the Dashboard, navigate to the Insights screen. 2. Locate the name of the customer that you want to review the statement verification for, then select on that row. 3. Go to the Document Check tab. 4. This will show a list of all files uploaded for that user, including fraud verdict and document quality. Screenshot of the Document Check tab in the Flinks Dashboard. The user has three files uploaded, each file has been checked, and each file has been labeled high risk. You can review each file by clicking on it to see the underlying risk and trust signals. Screenshot of a high-risk document in the Flinks Dashboard. The document has been flagged for several risks, most of which relate to suspicious document edits.

Receive fraud signals by API connection

To receive fraud signals by API, call the [/FraudAnalysis](../../api/upload/endpoints/fraud/fraud-analysis) endpoint.
## List of fraud signals Flinks checks every document that's uploaded through [Flinks Upload](./flinks-upload#upload-bank-statements). We return a verdict and any fraud signals we've found. To review the verification results of an uploaded file, see [Check for Fraud](./fraud-verification). ### Verdicts | **VERDICT** | **DESCRIPTION** | | :---------- | :----------------------------------------------------------------------- | | Trusted | No signs of fraud or modifications were found in the imported documents. | | Normal | No signs of fraud or modifications were found in the imported documents. | | Warning | One or more documents show signs of fraud or modifications. | | High-Risk | One or more documents show signs of fraud or modifications. | ### Fraud Signals | **TYPE OF FRAUD** | **DESCRIPTION** | | :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Editing Software Detected | The file may have been opened in a PDF-editing or image-editing software. | | Unusual Document Source | The file may have been created in or downloaded from an unexpected source. | | Account Number Edits | The account number in the file may have been changed. | | Name Edits | The name in the file may have been changed. | | Address Edits | The address in the file may have been changed. | | Account Type Edits | The type of account shown in the file (chequing, savings, etc.) may have been changed. | | Dollar Amount Edits | The dollar value for certain transactions may have been edited. Review the Count column for a count of occurrences. This may include the beginning balance, ending balance, total deposits, total withdrawals, daily balance, individual amounts, and/or ledger balances. | | Date Edits | The dates that correspond with certain transactions may have been edited. Review the Count column for a count of occurrences. This may include the begin date, the end date, and/or individual dates. | | Description Edits | The descriptions on certain transactions may have been edited. Review the Count column for a count of occurrences. | | Invalid Transaction Dates | Certain transaction dates fall outside the range captured for this statement and are not reconciled. | | Reconciled Balance | The beginning and ending balances of the statement do not reconcile with the sum of transactions during the period. Transactions may have been added, removed, or edited. | | Transaction Data Not Present | The file contains no transaction records, or no transaction pages were present in the upload. | | Invalid Date | The captured date is invalid and does not exist on the calendar. | | Future Date | The captured date is in the future. | | Misaligned Text | The field or text does not match the expected alignment and is inconsistent with the rest of the document. | | Future Year | The captured year is in the future. | | Invalid Year | The captured year is invalid or inconsistent across the document(s). | | Suspected Template | The document was created using software designed for generating document templates.

**Low confidence:** The detected software is used by both suspicious template creation websites and some legitimate providers.

**Medium confidence:** The detected software is commonly used by suspicious template creation sites.

**High confidence:** An exact match to a known fraudulent template was found. | ## Receive Your Data You can review processed data from the [files you've uploaded](./upload-a-file) using two methods: * In your Flinks Dashboard * By calling our APIs Data is typically ready within 10 minutes after you've uploaded your file(s), but may take up to 90 minutes in some cases. ### Access your data in the Flinks Dashboard Complete the following steps to accept your processed in your Flinks Dashboard. 1. In the Dashboard, navigate to the **INSIGHTS** screen. 2. Locate the name of the customer whose upload you want to review. 3. Check the **Financial Institution** and **Time/Date** fields to confirm that the statement is the most recent one. 4. Review the **Request Status** field to check if the upload is finished processing. 5. If the **Request Status** field is showing as **Completed**, click on the row to review your insights. 6. Review your processed data. If you are receiving other Flinks insights, such as Attributes, you can also access that data here. 7. (Optionally) [Check for fraud](./fraud-verification) to see if we've identified any fraud signals. Screenshot of the Insights tab in the Flinks Dashboard. This tab shows information about a customer, including their employer and accounts. ### Access your data by calling our APIs Call one of the following endpoints, depending on the type of data you want to receive: * To receive processed data for bank statements, call the [/GetAccountsDetail](../../api/connect/endpoints/account-linking/get-accounts-detail) endpoint. * To receive information about any fraud signal(s) that were detected in an uploaded file, call the [/FraudAnalysis](../../api/upload/endpoints/fraud/fraud-analysis) endpoint. # Flinks Upload Source: https://docs.flinks.com/guides/upload/flinks-upload Enable bank statement uploads in Flinks Connect with data extraction and fraud detection. Onboard more users by offering to upload bank statements alongside standard bank linking. Flinks document processing and authentication is a feature that you can enable in Flinks Connect and in your Flinks Dashboard to process, authenticate, and extract data from bank statements. If you’re already using Flinks, you’ll get the data in the same format you are used to via the Flinks Dashboard or API. Gif showing a user uploading bank statements in Flinks Connect. **Use this feature if you want to:** * **Increase your application volume** and **reduce drop-off** by giving users a faster, simpler way to share their financial data. * Save time and costs associated with manually reviewing statements. * Automate your current document-processing flows. * Add an extra layer of security that includes robust fraud detection with actionable verdicts: **Trust, Normal, Warning, or High Risk** documents, allowing you to be confident in the data. ## How it works Flinks offers two ways to enable document uploads in your flow: **Primary** or only as a **Fallback**. However, you can also send your users a direct link to an upload-only flow. You must choose one of these configurations. ### Upload bank statements in Flinks Connect - Primary option When set as the Primary option, users will see the choice to either link their bank account or upload bank statements right after selecting their institution. Additionally, the fallback logic (e.g., if login fails or the institution isn't listed) is also enabled under the Primary configuration. This ensures that users can always upload statements if the direct bank connection doesn't work. **In other words, the "fallback" behaviour is built into the Primary setting.** Series of images showing a user going through the primary upload option. *With the Primary option, the "Select a connection method" screen is enabled.* ### Upload files as a Fallback option With Fallback enabled, the "connection method" screen is disabled, and users are first required to attempt to link their bank. If they encounter an issue, such as a failed login, wrong credentials, inactivity, or an unlisted institution, only then does the option to upload bank statements appear. The user can't find their Institution when searching in the institution list. Image showing the user going through the fallback option. User searches for their institution, but it does not appear, so the button to upload bank statements is made available. Upload statements when the user doesn't remember their username or password. Image depicting the fallback option. User types in an invalid username, so the option to upload bank statements appears on the error screen. With fallback enabled, your users will also see the option to upload after inactivity. Image showing fallback option. User times out on the Flinks Connect login screen, so a pop-up appears asking if the user would like to upload bank statements or connect to their bank. ### Send users a direct link to upload documents By adding `/Upload` to your Flinks Connect URL, you can also send your users to an upload-only flow. By using parameters in Flinks Connect, you can customize the wording to specify how many bank statements you want to collect from users. Image showing the upload-only option screen. The page shows the option to upload bank statements, as well as a back button. No other options are available on this page. ## What can I upload? For more information on the files that you can upload to Flinks Connect or are in your Flinks Dashboard, review the following table: | **AREA** | **SUPPORTED SETTINGS** | | :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------ | | **Countries** | This feature is available in Canada and the United States. | | **Document Types** | This feature can process bank statements for chequing, savings, and credit cards, as well as void cheques (and supports fraud detection for all). | | **File Extensions** | This feature can process PDF, JPEG, PNG, and TIFF files. | | **File Sizes** | This feature requires that the file you upload is 180 MB or smaller, or 20 MB per file. | | **Number of Files** | This feature allows you to upload a maximum of 24 files at a time. | # Fraud Signals & False Positives Source: https://docs.flinks.com/guides/upload/fraud-signals Understand the fraud signals detected by Flinks Upload and how to handle false positives. Flinks Upload automatically analyzes uploaded bank statements for signs of tampering or manipulation. When suspicious indicators are found, fraud signals are returned in the response to help you make informed decisions. ## Fraud signal list The following signals may be detected during document analysis: | Signal | Description | | :---------------------------- | :----------------------------------------------------------------------------------------- | | **Editing software detected** | The document metadata indicates it was created or modified using document editing software | | **Unusual document source** | The document origin doesn't match typical bank-generated statements | | **Account information edits** | The account number, name, or address fields show signs of modification | | **Dollar amount edits** | Transaction amounts or balance figures appear to have been altered | | **Date edits** | Transaction dates or statement period dates show signs of modification | | **Description edits** | Transaction descriptions appear to have been changed | | **Misaligned text** | Text elements are not properly aligned, suggesting content was added or moved | | **Unreconciled balances** | Running balances don't match when calculated from transactions | | **Missing transaction data** | Expected transaction data is absent from the statement | | **Empty transaction data** | Transaction sections exist but contain no data | ## Most common signals The three most frequently triggered signals are: 1. **Unreconciled balances**: Running totals don't add up when recalculated from individual transactions 2. **Unusual document source**: The PDF producer or creator doesn't match known bank output 3. **Editing software detected**: The document metadata references editing tools ## Document support | Document type | Fraud detection | | :-------------- | :---------------- | | Bank statements | Supported | | Void cheques | **Not supported** | Fraud analysis is only available for bank statements. Void cheques are processed for data extraction only. ## Understanding false positives Not every fraud signal indicates actual fraud. Some legitimate user behaviors can trigger signals. ### Print-to-PDF (common false positive) When users print their bank statement to PDF instead of downloading the original file, the resulting document may trigger fraud signals. Common print-to-PDF producers include: * **PDFium** (Chrome's built-in PDF printer) * **Microsoft Print to PDF** (Windows) * **macOS Quartz PDFContext** (macOS print dialog) These tools modify the document's metadata and structure, which can trigger the **"Unusual document source"** and **"Editing software detected"** signals even though the content hasn't been tampered with. ### Actual fraud indicators The following editing tools in document metadata are stronger indicators of manipulation: * PDF Filler * Sejda * iLovePDF * Adobe Acrobat Pro (when used for editing, not just viewing) * Other general-purpose PDF editing tools When these tools appear alongside signals like dollar amount edits, description edits, or unreconciled balances, the likelihood of tampering is significantly higher. ## Best practices **Encourage direct downloads.** Ask your users to download their bank statements directly from their financial institution's website or mobile app. This produces the cleanest documents and minimizes false positives. * **Don't auto-reject on a single signal.** A single fraud signal (especially "unusual document source" alone) may be a false positive. Look for combinations of signals. * **Prioritize balance reconciliation.** Unreconciled balances combined with dollar amount edits is a strong indicator of tampering. * **Review the document source.** Check whether the PDF producer is a known print-to-PDF tool or a dedicated editing tool. * **Use the fraud verdict.** Flinks provides an overall fraud verdict, **Trust**, **Normal**, **Warning**, or **High Risk**, that considers the combination of signals. Use this as your primary decision point. ## Accessing fraud data Fraud signals are available through: * The [Fraud Analysis API](/api/upload/endpoints/fraud/fraud-analysis) endpoint * The Flinks Dashboard (visual review) * Webhook notifications (if configured) ## Related resources * [Fraud & Verification](/guides/upload/fraud-verification) * [Document Processing](/guides/upload/document-processing) * [Fraud Analysis API](/api/upload/endpoints/fraud/fraud-analysis) # Check for Fraud Source: https://docs.flinks.com/guides/upload/fraud-verification Review fraud verification results for uploaded bank statements in the Flinks Dashboard or via API. Flinks checks every bank statement that is uploaded through [Flinks Upload](./flinks-upload#flinks-upload) for several signs of fraud. Complete the following steps to check the verification results: 1. In the Dashboard, navigate to the Insights screen. 2. Locate the name of the customer that you want to review the statement verification for, then select that row. 3. Go to the Document Check tab 4. This will show a list of all files uploaded for that user, including fraud verdict and document quality. Screenshot of the Document Check tab in the Flinks Dashboard. You can review each file by clicking on it to see the underlying risk and trust signals. Screenshot of the Document Check tab in the Flinks Dashboard.

Receive fraud signals by API connection

To receive fraud signals by API, call the [/FraudAnalysis](../../api/upload/endpoints/fraud/fraud-analysis) endpoint.
# Getting Started with Flinks Upload Source: https://docs.flinks.com/guides/upload/getting-started Enable Flinks Upload in Flinks Connect to process and extract data from bank statements. Flinks Upload is a feature that you can enable in both Flinks Connect and in your Flinks Dashboard that processes and extracts data from a bank statement. Before following the instructions below, ensure that you have already [set up Flinks Connect](../connect/flinks-connect/widget#flinks-connect-widget). Then, let your Flinks Representative know that you want to start using Flinks Upload. They will walk you through the following steps: 1. Choose which upload screens you want to enable. For more information about the screens you can choose from, see [How Upload works](./upload-a-file#upload-a-file). 2. Choose how you want to receive an alert when a fraud signal is detected in an uploaded file. You can: * Be alerted via a notification * Set up Webhooks to deliver fraud alerts to you automatically 3. (Optionally) Customize the text on the upload screen. 4. (Optionally) Set up even listeners if you want to take action on any of the following JavaScript events: * Upload component is loaded (COMPONENT\_LOAD\_UPLOAD) * Files are added or removed (UPLOAD\_INPUT\_CHANGE) * A fraud signal is triggered by our statement validation service (UPLOAD\_INVALID\_FILE) * User clicks the Continue button in Flinks Connect (UPLOAD\_SUBMIT) * Upload fails (UPLOAD\_ERROR). 5. (Optionally) Call the [/FraudAnalysis endpoint](../../api/upload/endpoints/fraud/fraud-analysis) to check if any fraud signals were detected. For more information about why you may want to set up an event listener, speak to your Flinks representative. Once you're set up, you can start uploading files and receiving your data. # Upload Integration Tips Source: https://docs.flinks.com/guides/upload/integration-tips Integration modes, fallback triggers, and best practices for Flinks Upload. This guide covers practical tips for integrating Flinks Upload into your application, including submission modes, data consumption patterns, and handling edge cases. ## Integration modes for submitting documents There are three ways users can submit documents to Flinks Upload: | Mode | Description | Best for | | :---------------------------- | :------------------------------------------------------------------------- | :---------------------------------------------------------- | | **Connect Widget (Primary)** | Upload option displayed alongside bank linking after institution selection | Maximum coverage: users choose between linking or uploading | | **Connect Widget (Fallback)** | Upload option appears only after a failed bank login attempt | Keeping bank linking as the primary flow | | **Dashboard** | Manual upload through the Flinks Dashboard | Back-office or support-initiated uploads | For details on configuring the primary and fallback modes, see [Flinks Upload](/guides/upload/flinks-upload). ## Integration modes for consuming data | Mode | Description | | :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | | **API** | Call [`/GetAccountsDetail`](/api/connect/endpoints/account-linking/get-accounts-detail) to retrieve extracted transaction and account data programmatically | | **Dashboard** | View extracted data and fraud signals visually in the Flinks Dashboard | Use the API for automated workflows. Use the Dashboard for manual review of fraud signals and document quality. ## Fallback triggers When Upload is configured as a fallback in Flinks Connect, the upload option appears automatically when the user encounters one of these connection errors: | Error code | Description | | :----------------------------------- | :----------------------------------------------------------- | | `INVALID_USERNAME` | The username entered was not recognized | | `INVALID_PASSWORD` | The password entered was incorrect | | `INVALID_LOGIN` | Generic login failure | | `DISABLED_LOGIN` | The user's online banking access is disabled | | `RETRY_LATER` | The financial institution is temporarily unavailable | | `SESSION_EXPIRED` | The session timed out during authentication | | `INVALID_SECURITY_RESPONSE_NO_RETRY` | Security question answered incorrectly with no retry allowed | | `AGGREGATION_ERROR` | A general error occurred during data aggregation | The fallback behavior is also built into the Primary configuration, so if you enable Primary mode, fallback logic is included automatically. ## Force-upload shortcut You can send users directly to the upload flow for a specific financial institution by appending `/upload/[Institution Name]` to your Flinks Connect URL: ```url theme={null} https://[instance]-iframe.private.fin.ag/v2/upload/[Institution Name] ``` This bypasses the institution selector and login screens, taking the user straight to the document upload screen for the specified institution. ## Async handling with webhooks Flinks Upload processes documents asynchronously. Rather than polling the API for results, configure [webhooks](/guides/webhooks/introduction) to receive a notification when processing completes. **Use webhooks over polling.** Webhook-based async handling is the recommended pattern for Upload. It reduces unnecessary API calls and delivers results as soon as they're ready. ## Credit union member numbers For credit union accounts, member numbers may be displayed with suffixes that indicate the account type: | Suffix | Account type | | :--------------- | :--------------------- | | `-0` | Chequing / share draft | | `-1` | Savings | | `-2`, `-3`, etc. | Additional accounts | For example, a member number like `xxxx2354-0` indicates a chequing account, while `xxxx2354-1` indicates a savings account under the same membership. ## Multiple files in one upload When a user uploads multiple PDF files in a single submission, they count as **one upload** against your quota. You don't need to have users submit files one at a time: up to 24 files (180 MB total) can be included in a single upload. ## Related resources * [Getting Started with Upload](/guides/upload/getting-started) * [Flinks Upload](/guides/upload/flinks-upload) * [Upload Capabilities](/guides/upload/capabilities) * [Webhooks](/guides/webhooks/introduction) # Manage Files Source: https://docs.flinks.com/guides/upload/manage-files Replace, organize, and delete previously uploaded files in Flinks Connect and Dashboard. Flinks allows you to manage files that you've previously uploaded through Flinks Upload. You can replace an existing file with a newer version, delete a file, and more. Use this feature if you want to: * Update existing statements for ongoing client relationships * Quickly fix mistakes, such as replacing a wrong month or file type * Organize everything together under one `loginId`, to avoid searching through multiple entries You can manage your files using Flinks Connect and your Flinks Dashboard. For more information about which actions you can perform where, refer to the table below | **ACTION** | **FLINKS CONNECT** | **FLINKS DASHBOARD** | | :---------------------------------- | :----------------: | :------------------: | | Replace an existing file | Yes | Yes | | Organize files together by Login ID | Yes | Yes | | Delete a file | No | Yes | ## Manage your files in your Flinks Dashboard Complete the following steps to start managing your files in Flinks Dashboard. 1. Log in to your Flinks Dashboard. 2. Navigate to the **Insights** tab. 3. Click on the **Manage files** button. 4. You’ll see the **Manage files** dialogue box. Upload a new file, or remove an existing file from the list. 5. Click **Save Changes**. ## Manage your files in Flinks Connect Complete the following steps to start managing your files in Flinks Connect. 1. Complete the flow to upload a file. 2. Upload a file with the same name and file type as the one that you want to replace. 3. Click **Upload**. # Receive Your Data Source: https://docs.flinks.com/guides/upload/receive-your-data Access processed bank statement data through the Flinks Dashboard or API endpoints. You can review processed data from the [files you've uploaded](./upload-a-file#upload-a-file) using two methods: * In your Flinks Dashboard * By calling our APIs Data is typically ready within 10 minutes after you've uploaded your file(s), but it may take up to 90 minutes in some cases. ### Access your data in the Flinks Dashboard Complete the following steps to accept your processed in your Flinks Dashboard. 1. In the Dashboard, navigate to the **INSIGHTS** screen. 2. Locate the name of the customer whose upload you want to review. 3. Check the **Financial Institution** and **Time/Date** fields to confirm that the statement is the most recent one. 4. Review the **Request Status** field to check if the upload is finished processing. 5. If the **Request Status** field is showing as **Completed**, click on the row to review your insights. 6. Review your processed data. If you are receiving other Flinks insights, such as Attributes, you can also access that data here. 7. (Optionally) [Check for fraud](./fraud-verification) to see if we've identified any fraud signals. Screenshot of the insights tab on the Flinks Dashboard showing customer employer and account information. ## Access your data by calling our APIs Call one of the following endpoints, depending on the type of data you want to receive: * To receive processed data for bank statements, call the [/GetAccountsDetail](../../api/connect/endpoints/account-linking/get-accounts-detail) endpoint. * To receive information about any fraud signal(s) that were detected in an uploaded file, call the [/FraudAnalysis](../../api/upload/endpoints/fraud/fraud-analysis) endpoint. # Upload a file Source: https://docs.flinks.com/guides/upload/upload-a-file There are two ways that you can upload a file using Flinks Upload: * Upload a file through your Flinks Dashboard * Upload a file through Flinks Connect You can upload files for a singular customer at a singular financial institution. If you have multiple customer files to upload, complete one upload per customer. If a customer has files from multiple financial institutions, complete one upload per financial institution. For more information about each method, review the following sections: ### Upload a file through your Flinks Dashboard Complete the following steps to upload a file to your Flinks Dashboard: Screenshot of the Flinks Connect UI showing the option to upload documents. *Click on "import PDF/Image" to upload documents via the Dashboard.* 1. In the Dashboard, navigate to the Insights screen, then go to the External Data tab. 2. Select Import PDF. 3. Select the file(s) you want to upload. You must select files for a singular customer at a singular financial institution. \[componentCallout component] \[componentCallout component] 4. Enter a unique identifier to describe the file(s) you've selected, such as a customer name. This is used to identify the files when we deliver the extracted data to you. 5. Select Import Files. You'll see a success message if we successfully receive your file(s). If you receive an error message, try uploading the files again at a later time. 6. Review the upload status to check if the data has finished processing. Data is typically ready to review within 10 minutes of uploading, but in some cases it may take up to four hours to process. \[componentCallout component] ### Upload a file through Flinks Connect Complete the following steps to upload a file in Flinks Connect. Series of images showing a user going through the primary upload option. *Primary upload flow in Flinks Connect* 1. Depending on the screen you see, complete one of the following: * If you are on the Upload PDF Statements screen, continue to step 2. * If you are seeing the upload option after experiencing a bad connection, select Upload PDF statements. * If you are being asked to choose a connection option, select Upload bank statements. 2. Select Browse and then select the file(s) you want to upload. 3. Select Continue. You'll see a message if we successfully receive your file(s). 4. Review the upload status to check if the data has finished processing. Data is typically ready to review within 10 minutes of uploading, but in some cases it may take up to four hours to process. For more information about how to review processed data, see [Receive Your Data](./receive-your-data). # HMAC Signature Validation Source: https://docs.flinks.com/guides/webhooks/hmac-validation Validate webhook authenticity using HMAC-SHA256 signature verification. Flinks includes an HMAC-SHA256 signature in webhook headers so you can verify that the payload was sent by Flinks and hasn't been tampered with. ## Prerequisites * A production, staging, or development instance with [webhooks enabled](/guides/webhooks/introduction) * HMAC enabled on your instance (contact your Flinks Representative or open a ticket via the [Support Portal](https://help.flinks.com/support/home)) * An HMAC secret key provided by Flinks ## How it works 1. When Flinks sends a webhook, it computes an HMAC-SHA256 hash of the request body using your shared secret key. 2. The resulting signature is included in the webhook request header. 3. Your server computes the same hash and compares it to the header value. 4. If they match, the webhook is authentic. ## Python implementation ```python theme={null} import hmac import hashlib import base64 import json def verify_webhook_signature(payload_body, received_signature, secret_key): """ Verify the HMAC-SHA256 signature of a Flinks webhook. Args: payload_body: The raw request body (bytes) received_signature: The signature from the webhook header secret_key: Your HMAC secret key from Flinks Returns: True if the signature is valid, False otherwise """ # Compute the expected signature computed_hash = hmac.new( secret_key.encode('utf-8'), payload_body, hashlib.sha256 ).digest() computed_signature = base64.b64encode(computed_hash).decode('utf-8') # Compare signatures using constant-time comparison return hmac.compare_digest(computed_signature, received_signature) ``` ## Example: Flask webhook endpoint ```python theme={null} from flask import Flask, request, jsonify import hmac import hashlib import base64 app = Flask(__name__) HMAC_SECRET = "your-hmac-secret-key" @app.route("/webhook", methods=["POST"]) def handle_webhook(): # Get the signature from the request header received_signature = request.headers.get("flinks-authenticity-key", "") # Get the raw request body payload_body = request.get_data() # Compute the expected signature computed_hash = hmac.new( HMAC_SECRET.encode("utf-8"), payload_body, hashlib.sha256 ).digest() computed_signature = base64.b64encode(computed_hash).decode("utf-8") # Verify the signature if not hmac.compare_digest(computed_signature, received_signature): return jsonify({"error": "Invalid signature"}), 403 # Process the webhook payload data = request.get_json() response_type = data.get("ResponseType") if response_type == "KYC": # Handle KYC webhook pass elif response_type == "GetAccountsDetail": # Handle account detail webhook pass # Return 200 to acknowledge receipt return jsonify({"status": "ok"}), 200 ``` Always use constant-time comparison (like `hmac.compare_digest`) when verifying signatures. Standard string comparison (`==`) is vulnerable to timing attacks. ## Node.js implementation ```javascript theme={null} const crypto = require('crypto'); function verifyWebhookSignature(payloadBody, receivedSignature, secretKey) { const computedHash = crypto .createHmac('sha256', secretKey) .update(payloadBody) .digest('base64'); // Use timingSafeEqual for constant-time comparison const expected = Buffer.from(computedHash, 'utf8'); const received = Buffer.from(receivedSignature, 'utf8'); if (expected.length !== received.length) { return false; } return crypto.timingSafeEqual(expected, received); } ``` ### Example: Express webhook endpoint ```javascript theme={null} const express = require('express'); const crypto = require('crypto'); const app = express(); const HMAC_SECRET = 'your-hmac-secret-key'; app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => { const receivedSignature = req.headers['flinks-authenticity-key'] || ''; const payloadBody = req.body; // Compute the expected signature const computedHash = crypto .createHmac('sha256', HMAC_SECRET) .update(payloadBody) .digest('base64'); // Verify using constant-time comparison const expected = Buffer.from(computedHash, 'utf8'); const received = Buffer.from(receivedSignature, 'utf8'); if (expected.length !== received.length || !crypto.timingSafeEqual(expected, received)) { return res.status(403).json({ error: 'Invalid signature' }); } // Process the webhook payload const data = JSON.parse(payloadBody); const responseType = data.ResponseType; if (responseType === 'KYC') { // Handle KYC webhook } else if (responseType === 'GetAccountsDetail') { // Handle account detail webhook } // Return 200 to acknowledge receipt res.status(200).json({ status: 'ok' }); }); ``` ## Using the Tag parameter with webhooks The `Tag` parameter in Flinks Connect allows you to attach custom metadata to a connection, which is then included in the webhook payload. This is useful for correlating webhook data with your internal records without needing to look up the `loginId`. ### Setup Add the `tag` parameter to your Flinks Connect iframe URL: ```url theme={null} https://[instance]-iframe.private.fin.ag/v2/?tag=userId%3D12345%2Csession%3Dabc&redirectUrl=https://example.com/callback ``` ### Webhook payload with Tag When a webhook is delivered, the `Tag` value is included in the payload: ```json theme={null} { "Tag": "userId=12345,session=abc", "ResponseType": "GetAccountsDetail", "HttpStatusCode": 200, "Login": { "Id": "f5d5f008-e529-4714-21c0-08d6abf5bce4" }, "Accounts": [] } ``` Do not include personally identifiable information (PII) in tags. Use internal reference IDs instead. ## Webhooks as the recommended async pattern Webhooks are the recommended approach for receiving data from Flinks, rather than polling the API. Benefits include: * **No polling overhead**: Receive data as soon as processing completes * **Reduced API calls**: Avoid repeated `/GetAccountsDetail` calls while waiting for data * **Immediate notification**: Get alerted within seconds of data availability * **Retry handling**: Flinks retries failed deliveries up to 10 times at 30-minute intervals For webhook setup instructions, see the [Webhooks Introduction](/guides/webhooks/introduction). ## Verification checklist * Extract the signature from the webhook request header * Compute the HMAC-SHA256 hash of the raw request body using your secret key * Base64-encode the computed hash * Compare using constant-time comparison * Return HTTP 200 on success * Return HTTP 403 on signature mismatch (and log the event for investigation) # Webhooks Source: https://docs.flinks.com/guides/webhooks/introduction Set up webhooks to receive customer data automatically from Flinks without polling the API. Webhooks allow you to receive customer data automatically when processing completes, eliminating the need to poll the API for results. Instead of calling `/GetAccountsDetail` or `/GetAccountsDetailAsync` repeatedly, Flinks sends a POST callback to your endpoint with the JSON result as soon as data extraction is complete. ## Webhook types Flinks supports the following types of webhooks: | Type | Description | Payload | | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | | **KYC** | Delivers personal information (name, address, email, phone) as soon as it's fetched from the FI, before full account data is ready | KYC holder data with `"ResponseType": "KYC"` | | **GetAccountsDetail** | Delivers the full account data payload (KYC + IBV + transactions) when processing completes | Same as a `/GetAccountsDetail` 200 response with `"ResponseType": "GetAccountsDetail"` | | **Flinks Pay Events** | Delivers payment status updates for [Flinks Pay](/guides/pay/eft/setup-flinks-pay) transactions (e.g., payment initiated, completed, failed) | Payment event data | | **Flinks Upload Fraud Alerts** | Delivers fraud alert notifications when suspicious documents are detected through [Flinks Upload](/guides/upload/getting-started) | Fraud alert data | The KYC webhook is delivered as soon as the customer's personal information is processed, without waiting for full account data. This is useful for time-sensitive identity verification. You will still receive a separate `GetAccountsDetail` webhook once all data is processed. ## Enabling webhooks To enable webhooks on your instance, open a ticket via the [Flinks Support Portal](https://help.flinks.com/support/home) with the following information: 1. Your **webhook URL**. 2. The **instance** (environment) where the webhook should be configured. 3. Flinks configures your instance to send callbacks to your URL. ### Endpoint requirements Your webhook endpoint must: * Accept **HTTP POST** requests * Respond with an **HTTP 200** status code to confirm receipt * Have a valid **SSL certificate** (self-signed certificates are not accepted) ### Delivery failure handling | Behavior | Detail | | :--------------------- | :------------------------------------------------------- | | **Retry attempts** | Up to 10 retries per failed delivery | | **Retry interval** | 30 minutes between attempts | | **Failure definition** | Any response other than HTTP 200 is treated as a failure | ## Custom tags in webhooks If you pass a `Tag` parameter in the Flinks Connect iframe URL, the tag value is included in the webhook payload. This allows you to correlate webhook data with your internal records. ```json theme={null} { "Tag": "clientUserId=abc123", "ResponseType": "GetAccountsDetail", "HttpStatusCode": 200, "Accounts": [...], "Login": {...}, "Institution": "...", "RequestId": "..." } ``` ## Reconciling user accounts You can embed your internal UserId as a [custom tag](#custom-tags-in-webhooks) during the Flinks connection flow. When the webhook payload is delivered, it includes both this tag and the Flinks `LoginId`, making it straightforward to map your internal user records to their corresponding Flinks connection without any additional lookups. ## Limitations | Limitation | Detail | | :----------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **No Attributes payloads** | Webhooks deliver raw aggregated data (e.g., `GetAccountsDetail`), not Attributes analysis. Use the webhook payload as a trigger for your server to call an Attributes endpoint (e.g., `/GetIncomeAttributes` or `/GetLendingAttributes`) to enrich the data. | | **No sandbox testing** | Webhooks cannot be tested in sandbox environments. Use a staging or production instance. | | **Single URL per environment** | Each instance can only have one webhook URL configured. All webhook types are delivered to the same URL. | ## Fraud alert webhooks If you have [Flinks Upload](/guides/upload/getting-started) enabled, you can also configure webhooks to immediately receive fraud alert notifications when suspicious documents are detected. These alerts can return a manual review or deny verdict based on the fraud signals found. For more on fraud signals, see [Document Processing](/guides/upload/document-processing#list-of-fraud-signals). Contact your Flinks Representative or open a ticket via the [Support Portal](https://help.flinks.com/support/home) to enable fraud alert webhooks. ## Related resources * [HMAC Signature Validation](/guides/webhooks/hmac-validation) * [Webhooks API Reference](/api/connect/webhooks) * [Retrieve Account Data](/guides/connect/retrieve-account-data) # Flinks Documentation Source: https://docs.flinks.com/index

Welcome to Flinks' Documentation

Build financial apps with our secure API, access bank data, transactions, and account info easily. Watch the video below to learn what Flinks can do for you.

Discover our products

Connect to your users' financial accounts
Connect
Gain insights from raw financial data
Enrich
Provide a holistic bank payment experience
Pay
Launch your Open Banking API
Outbound

Explore our use cases

Verify your customers' bank account information to prevent fraud Verify your customer's income and employment information for various use cases Get insights from borrower financial data and make smarter, quicker lending decisions Send money to your bank account using e-Transfer and EFT payments Create your open banking solution for bank APIs Verify the authentication of documents provided to your customers

Browse by popular topics