Libraries
There is a running list of versions and brief changelog on our Release Notes page.
iOS
The Transact iOS SDK can be installed either with the Swift Package Manager via the link to our Github repo as detailed below or via CocoaPods.
Requirements
- Xcode 12.0 or greater
- iOS 13.0 or greater
Swift Package Manager
Inside Xcode, go to Project Settings -> Project -> Package Dependencies and click the + to add a new Package.

https://github.com/atomicfi/atomic-transact-iosCocoaPods
pod 'AtomicSDK'AtomicConfig class to customize the Transact experience with any of the Transact SDK Parameters. import SwiftUI
import AtomicTransact
struct ContentView: View {
@State var showingTransact = false
var body: some View {
Button("Launch Transact") {
showingTransact = true
}.atomicTransact(
isPresented: $showingTransact,
config: {
AtomicConfig(
publicToken: "PUBLIC_TOKEN",
scope: .userLink,
tasks: [.init(operation: .deposit)],
theme: Theme(
brandColor: "#9460FE",
overlayColor: "#000000",
dark: false,
navigationOptions: NavigationOptions(
showBackButton: true,
showBackButtonText: false,
showCloseButton: true
)
),
language: "en",
deeplink: Deeplink(
step: "login-company",
companyId: "5e4c4d18b7d75c37aac54a8f"
),
search: Search(
ruleId: "67571ed7b278a518d7d8abdf"
),
metadata: [
"version": "1.2.1",
"test": "New User Experience",
"testVariant": "B"
]
)},
onDataRequest: { request in
// Handle data request for account/payment information
print("Data request: \(request.fields)")
return TransactDataResponse(/* provide required data */)
},
onCompletion: { result in
switch result {
case .finished(let response):
print("Finish event: \(response.taskId) \(response.handoff)")
case .closed(let response):
print("Close event: \(response.reason)")
case .error(let error):
print("Transact returned with error: \(error)")
default:
print("Default case")
}
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import AtomicTransact
let config = AtomicConfig(
publicToken: "PUBLIC_TOKEN",
scope: .userLink,
tasks: [.init(operation: .deposit)],
theme: Theme(
brandColor: "#9460FE",
overlayColor: "#000000",
dark: false,
navigationOptions: NavigationOptions(
showBackButton: true,
showBackButtonText: false,
showCloseButton: true
)
),
language: "en",
deeplink: Deeplink(
step: "login-company",
companyId: "5e4c4d18b7d75c37aac54a8f"
),
search: Search(
ruleId: "67571ed7b278a518d7d8abdf"
),
metadata: [
"version": "1.2.1",
"test": "New User Experience",
"testVariant": "B"
]
)
Atomic.presentTransact(
from: self,
config: config,
onDataRequest: { request in
// Handle data request for account/payment information
print("Data request: \(request.fields)")
return TransactDataResponse(/* provide required data */)
},
onInteraction: { interaction in
print("Interaction event: \(interaction.name) \(interaction.value)")
},
onCompletion: { result in
switch result {
case .finished(let response):
print("Finish event: \(response.taskId) \(response.handoff)")
case .closed(let response):
print("Close event: \(response.reason)")
case .error(let error):
print("Transact returned with error: \(error)")
}
})
Android
The Atomic Android SDK is availble via Maven Central.
Update your project plugins
In your root-level (project-level) Gradle file (build.gradle), add rules to include the Android Gradle plugin. Check that you have Google's Maven repository as well.
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
mavenCentral() // Include to import Transact Android SDK
}
dependencies {
// ...
}
}Add the Transact SDK to your app
In your module (app-level) Gradle file (usually app/build.gradle), add a line to the bottom of the file. The latest version of the SDK is .
android {
defaultConfig {
minSdkVersion 21 // or greater
}
// Enable Java 8 support for Transact to work
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
// ...
implementation 'financial.atomic:transact:<insert latest version>'
} If you're using the Transact SDK in a Java environment, add the following configuration to your module (app-level) Gradle file (usually app/build.gradle). These constraints resolve compatibility issues with Android lifecycle versions above 2.6.
implementation("financial.atomic:transact:<insert latest version>")
constraints {
implementation("androidx.lifecycle:lifecycle-common") {
version {
strictly("2.6.1")
}
}
implementation("androidx.lifecycle:lifecycle-process") {
version {
strictly("2.6.1")
}
}
}
Config class to customize the Transact experience with any of the Transact SDK Parameters. Change the Transact theme
You have the ability to modify your theme by adding an activity tag. Add the following snippet to your manifest:
<activity
android:name="financial.atomic.transact.activity.TransactActivity"
android:theme="@style/Theme.You.Want"
/>
If you get a Manifest merger failed error, you can resolve it by adding xmlns:tools="http://schemas.android.com/tools" to your manifest tag, then updating your TransactActivity to the following:
<activity
android:name="financial.atomic.transact.activity.TransactActivity"
android:theme="@style/Theme.You.Want"
tools:replace="theme"
/>
import org.json.JSONObject
import financial.atomic.transact.*
import financial.atomic.transact.receiver.TransactBroadcastReceiver
val config = Config(
publicToken = "PUBLIC_TOKEN",
scope = Config.Scope.USER_LINK,
tasks = listOf(Config.Task(operation = Config.Operation.DEPOSIT)),
theme = Config.Theme(
brandColor = "#9460FE",
overlayColor = "#000000",
dark = false,
navigationOptions = Config.NavigationOptions(
showBackButton = true,
showBackButtonText = false,
showCloseButton = true
)
),
language = "en",
deeplink = Config.Deeplink(
step = "login-company",
companyId = "5e4c4d18b7d75c37aac54a8f"
),
search = Config.Search(
ruleId = "67571ed7b278a518d7d8abdf"
),
metadata = mapOf(
"version" to "1.2.1",
"test" to "New User Experience",
"testVariant" to "B"
)
)
Transact.registerReceiver(context, object: TransactBroadcastReceiver() {
override fun onDataRequest(data: JSONObject) {
// Handle data request for account/payment information
Log.d("APP", "Data request: ${data.getJSONArray("fields")}")
// Return required data
}
override fun onInteraction(data: JSONObject) {
Log.d("APP", "Interaction event: ${data.getString("name")} ${data.getJSONObject("value")}")
}
override fun onFinish(data: JSONObject) {
Log.d("APP", "Finish event: ${data.getString("taskId")} ${data.optString("handoff")}")
}
override fun onClose(data: JSONObject) {
Log.d("APP", "Close event: ${data.getString("reason")}")
}
})
Transact.present(context, config)import android.content.Context;
import android.util.Log;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import financial.atomic.transact.*;
import financial.atomic.transact.receiver.TransactBroadcastReceiver;
public class TransactJavaImplementation {
public static void initializeTransact(Context context) {
Map<String, String> metadata = new HashMap<>();
metadata.put("version", "1.2.1");
metadata.put("test", "New User Experience");
metadata.put("testVariant", "B");
Config config = new Config(
"PUBLIC_TOKEN",
Config.Scope.USER_LINK,
Arrays.asList(new Config.Task(Config.Operation.DEPOSIT)),
new Config.Theme("#9460FE", "#000000", false,
new Config.NavigationOptions(true, false, true)),
"en",
new Config.Deeplink("login-company", "5e4c4d18b7d75c37aac54a8f"),
new Config.Search("67571ed7b278a518d7d8abdf"),
metadata
);
Transact.Companion.registerReceiver(context, new TransactBroadcastReceiver() {
@Override
public void onDataRequest(JSONObject data) {
// Handle data request for account/payment information
Log.d("APP", "Data request: " + data.optJSONArray("fields"));
// Return required data
}
@Override
public void onInteraction(JSONObject data) {
Log.d("APP", "Interaction event: " + data.optString("name") + " " + data.optJSONObject("value"));
}
@Override
public void onFinish(JSONObject data) {
Log.d("APP", "Finish event: " + data.optString("taskId") + " " + data.optString("handoff"));
}
@Override
public void onClose(JSONObject data) {
Log.d("APP", "Close event: " + data.optString("reason"));
}
});
Transact.Companion.present(context, config);
}
}
React Native
The Atomic React Native SDK is availble via npm.
Transact can be initialized by including our React Native SDK in your app and then calling the Atomic.transact method and passing it a configuration object.
yarn add @atomicfi/transact-react-nativeiOS Setup
- Xcode 12.0 or greater
- iOS 13.0 or greater
(cd ios && pod install)For applications using the Expo managed workflow, see the Expo documentation about using Native Modules.
Android Setup
Autolinking should set up everything when building.
config object. Refer to the Transact SDK Parameters section for more details. import { Atomic, Product } from "@atomicfi/transact-react-native"
Atomic.transact({
config: {
publicToken: "PUBLIC_TOKEN",
scope: "user-link",
tasks: [{ operation: "deposit" }],
theme: {
brandColor: "#9460FE",
overlayColor: "#000000",
dark: false,
navigationOptions: {
showBackButton: true,
showBackButtonText: false,
showCloseButton: true
}
},
language: "en",
deeplink: {
step: "login-company",
companyId: "5e4c4d18b7d75c37aac54a8f"
},
search: {
ruleId: "67571ed7b278a518d7d8abdf"
},
metadata: {
version: "1.2.1",
test: "New User Experience",
testVariant: "B"
}
},
onDataRequest: request => {
// Handle data request for account/payment information
console.log('Data request:', request.fields)
return { /* provide required data */ }
},
onInteraction: interaction => {
console.log('Interaction event:', interaction.name, interaction.value)
},
onFinish: data => {
console.log('Finish event:', data.taskId, data.handoff)
},
onClose: data => {
console.log('Close event:', data.reason)
}
})Flutter
A Flutter plugin that wraps the native Atomic Transact SDKs. The deployed package is available on pub.dev. Plus, you can view the plugin with a code example on Github
Add atomic_transact_flutter as a dependency in your pubspec.yaml file
dependencies:
...
atomic_transact_flutter: <version>iOS Requirements
- Xcode 12.0 or greater
- iOS 13.0 or greater
- For a how-to on updating the minimum iOS deployment version, see the Flutter Deployment documentation.
Android Requirements
Set the minSdkVersion in android/app/build.gradle
android {
defaultConfig {
minSdkVersion 21 // or greater
}
}AtomicConfig class to customize the Transact experience with any of the Transact SDK Parameters. import 'package:atomic_transact_flutter/atomic_transact_flutter.dart';
Atomic.transact(
config: AtomicConfig(
publicToken: "PUBLIC_TOKEN",
scope: AtomicScope.userLink,
tasks: [AtomicTask( product: AtomicProductType.deposit)],
theme: AtomicTheme(
brandColor: "#9460FE",
overlayColor: "#000000",
dark: false,
navigationOptions: AtomicNavigationOptions(
showBackButton: true,
showBackButtonText: false,
showCloseButton: true,
),
),
language: "en",
deeplink: AtomicDeeplink(
step: "login-company",
companyId: "5e4c4d18b7d75c37aac54a8f",
),
search: AtomicSearch(
ruleId: "67571ed7b278a518d7d8abdf",
),
metadata: {
"version": "1.2.1",
"test": "New User Experience",
"testVariant": "B",
},
),
onDataRequest: (AtomicTransactDataRequest request) {
// Handle data request for account/payment information
print("Data request: ${request.fields}");
// Return required data
return AtomicTransactDataResponse(/* provide required data */);
},
onInteraction: (AtomicTransactInteraction interaction) {
print("Interaction event: ${interaction.name} ${interaction.value}");
},
onCompletion: (AtomicTransactCompletionType type,
AtomicTransactResponse? response, AtomicTransactError? error) {
if (type == AtomicTransactCompletionType.finished && response != null) {
print("Finish event: ${response.taskId} ${response.handoff}");
} else if (type == AtomicTransactCompletionType.closed && response != null) {
print("Close event: ${response.reason}");
} else if (error != null) {
print("Error: ${error.message}");
}
},
);Browser
The Atomic Javascript SDK is availble via npm.
Transact can be initialized by including our JavaScript SDK in your page and then calling the Atomic.transact method and passing it a configuration object.
npm install @atomicfi/transact-javascriptconfig object. Refer to the Transact SDK Parameters section for more details. import { Atomic, Product } from "@atomicfi/transact-javascript"
Atomic.transact({
config: {
publicToken: "PUBLIC_TOKEN",
scope: "user-link",
tasks: [{ operation: "deposit" }],
theme: {
brandColor: "#9460FE",
overlayColor: "#000000",
dark: false,
navigationOptions: {
showBackButton: true,
showBackButtonText: false,
showCloseButton: true
}
},
language: "en",
deeplink: {
step: "login-company",
companyId: "5e4c4d18b7d75c37aac54a8f"
},
search: {
ruleId: "67571ed7b278a518d7d8abdf"
},
metadata: {
version: "1.2.1",
test: "New User Experience",
testVariant: "B"
}
},
onDataRequest: request => {
// Handle data request for account/payment information
console.log('Data request:', request.fields)
return { /* provide required data */ }
},
onInteraction: interaction => {
console.log('Interaction event:', interaction.name, interaction.value)
},
onFinish: data => {
console.log('Finish event:', data.taskId, data.handoff)
},
onClose: data => {
console.log('Close event:', data.reason)
}
})WebView
The Atomic SDKs are essentially lightweight wrappers around either a WebView or iframe, depending on the deployment. To that end, we have also made our webapp available for direct integration where that is preferred.
Implementing a WebView means you will not install our SDK directly into your app. Instead, you will use a WebView to load the Transact application into your mobile app or an iframe if in the browser. Another option is to use the unpkg CDN to inject the Transact SDK into your app via a script tag. If using the CDN, you'll need to create the config object within your script tag in order to properly instatiate the SDK.
The WebView will then communicate with the Atomic API via JavaScript loaded on the page. Within the context of a mobile app, you may use a WebView (for example, WKWebView on iOS) by building a self-hosted wrapper page.
To use the Transact WebView, you will need to build the /initialize URL. This URL is composed of the Transact base URL (https://transact.atomicfi.com/initialize/) and a base64 encoded string. The base64 encoded string is made up of an object containing a publicToken for the session to be intialized and the parameters used within the SDK (excluding onFinish, onClose, and onInteraction). Follow these steps:
- Retrieve a new publicToken from
/access-token - Add the publicToken to your configuration object
- Stringify and base64 encode the entire configuration object
- Append the resulting string to the Transact base URL to create the
/initializeURL
config object. Refer to the Transact SDK Parameters section for more details. {
"publicToken": "PUBLIC_TOKEN",
"tasks": [
{
"operation": "deposit"
}
]
}https://transact.atomicfi.com/initialize/YOUR_BASE64_ENCODED_STRINGParameters
When using the Transact SDK, the configuration object can be customized to change the look and user experience. Below are all of the available options for customization.
You can listen to client-side events using callback functions like onFinish, onClose, and onInteraction. Light branding customizations can be applied through the theme object, allowing you to set brand colors and toggle dark mode. For Spanish-speaking users, you can set language: 'es' to display all content in Spanish.
Required Properties
publicTokenstring- The public token returned during AccessToken creation.
scopeenum- Specifies the product suite to be launched within Transact, determining the features available to the user. For UserLink operations, such as
depositorverify, this value will beuser-link. tasks[TaskConfiguration]- Defines configuration for the tasks you wish to execute as part of the task workflow.
Child Properties
Required Properties
operationstring- Specifies the operation with which to initialize Transact. One of
deposit,verify, ortax. productstringDeprecated- One of
deposit,verify, ortax. This is deprecated in favor ofoperation.productwill be available for the foreseeable future and we will give ample warning when it is planned to be sunset.
Optional Properties
onCompletestringThe action to take on completion of the task. Can be either "continue" or "finish." To execute the next task, use "continue." To finish the task workflow and not execute any of the subsequent tasks, use "finish."Default value: "continue"
onFailstringThe action to take on failure of the task. Can be either "continue" or "finish." To execute the next task, use "continue." To finish the task workflow and not execute any of the subsequent tasks, use "finish."Default value: "continue"
distributionobjectOptionally pass in enforced deposit settings. Enforcing deposit settings will eliminate company search results that do not support the distribution settings.Child Properties
Required Properties
typestring- Can be
totalto indicate the remaining balance of their paycheck,fixedto indicate a specific dollar amount, orpercentto indicate a percentage of their paycheck.
Optional Properties
amountnumberWhen
distribution.typeisfixed, it indicates a dollar amount to be used for the distribution. Whendistribution.typeispercent, it indicates a percentage of a paycheck. This is not required ifdistribution.typeistotal.This value cannot be updated by the user unless
canUpdateis set totrue.canUpdatebooleanAllows a user to specify any amount they would like, overwriting the defaultamount.Default value: false
Optional Properties
themeobject
Child Properties
Optional Properties
brandColorstring
color CSS property. For example: #FF0000 or rgb(255, 0, 0). This property will mostly be applied to buttons.darkboolean
displaystring
"inline" to this property. You will also need to pass a CSS selector to the container parameter. This will append the Transact iframe as a child element of the div with the relevant selector.overlayColorstring
background-color CSS property. For example: #FF0000 or rgb(255, 0, 0). This property will change the overlay background color. This overlay is mainly only seen when Transact is used on a Desktop.navigationOptionsobject
Child Properties
Optional Properties
showBackButtonboolean
true, the back button is displayed, allowing users to navigate to the previous screen. Defaults to true if no value is provided.showBackButtonTextboolean
true, a text label will appear alongside the back button. Defaults to false if no value is provided.showCloseButtonboolean
true, the close button is available for users to exit the view. Defaults to true if no value is provided.containerstring
"inline" to theme.display.deeplinkobject
handoff[string]
exit-prompt, authentication-success, and high-latency. See Handoff Pages for more details.languagestring
en for English and es for Spanish.Default value: en
linkedAccountstring
_id of a LinkedAccount. When used, Transact will immediately begin authenticating upon opening. This parameter is used when the LinkedAccount's transactRequired flag is set to true.sessionContextstring
featuresobject
customerobject
conversionTokenstring
conversionToken to initialize Transact for a Conversion opportunity.searchobject
Child Properties
Optional Properties
ruleIdstring
tags[string]
gig-economy, payroll-provider, and unemployment.excludedTags[string]
gig-economy, payroll-provider, and unemployment.metadataobject
experimentsobject
inSdkboolean
false, close buttons and any user-facing CTAs which require hooking into SDK events, such as manual fallback CTAs, are removed from the UI of the client components.Default value: true
{
"publicToken": "PUBLIC_TOKEN",
"scope": "user-link",
"tasks": [
{
"operation": "deposit",
"distribution": {
"type": "fixed",
"amount": 50
}
}
],
"theme": {
"brandColor": "#1b1464",
"overlayColor": "#CCCCCC",
"navigationOptions": {
"showBackButton": true,
"showBackButtonText": false,
"showCloseButton": true
}
},
"deeplink": {
"step": "login-company",
"companyId": [
"5e4c4d18b7d75c37aac54a8f"
]
},
"container": "YOUR_CONTAINER_NAME",
"search": {
"ruleId": "67571ed7b278a518d7d8abdf"
},
"language": "en",
"metadata": {
"version": "1.2.1",
"test": "New User Experience",
"testVariant": "B"
}
}Handoff Pages
The following page names can be added to the handoff array to allow views to be handled outside of Transact.
exit-prompt- If the user has reached the login page and decides to exit, they are prompted with a view that asks them to confirm their exit. When
exit-promptis passed into thehandoffarray, users will no longer be presented with the exit confirmation. Theatomic-transact-closeevent will be triggered in its place. The event will also send the following data:{ handoff: 'exit-prompt' }. authentication-success- When authentication is successful, the user is taken to the success view within Transact. When
authentication-successis passed into thehandoffarray, users will no longer be taken to the success view. Theatomic-transact-finishevent will be triggered in its place. The event will also send the following data:{ handoff: 'authentication-success' }. high-latency- When authentication takes much longer than expected, the user is taken to the the high latency view within Transact. When
high-latencyis passed into thehandoffarray, users will no longer be taken to this view. Theatomic-transact-closeevent will be triggered in its place. The event will also send the following data:{ handoff: 'high-latency' }.
Event listeners
When using the SDK, events will be emitted and passed to the native application. Such events allow native applications to react and perform functions as needed. Some events will be passed with a data object with additional information.
onClose
Triggered in several different instances:
- If a user does not find their employer, payroll provider, or service provider, the data passed with the event will be
{ reason: 'zero-search-results' }.- If the Manual Fallback Call To Action in Console is enabled, the data passed with this event will be
{ reason: 'manual-fallback' }.
- If the Manual Fallback Call To Action in Console is enabled, the data passed with this event will be
- During the Transact process if a user is prompted to keep waiting or exit and they choose to exit, the data passed with the event will be
{ reason: 'task-pending' }. - At any point if the user clicks on the x the data passed with the event will be
{ reason: 'unknown' }.
onFinish
Triggered when the user reaches the success screen and closes Transact. The data passed with the event will include the taskId.
onDataRequest
Triggered when additional data is needed to complete a Task. For example, if your implementation is delaying the transit of bank or card data until the user is authenticated. The data passed with the event will be similar to the following:
{
"fields": [
"account",
"card"
],
"userId": "ATOMIC_USER_ID",
"taskId": "TASK_ID",
"identifier": "YOUR_IDENTIFIER",
"taskWorkflowId": "TASK_WORKFLOW_ID"
} The array of fields will contain a list of missing entities, with possible values of account and identity. You will need to use our Update User endpoint to update the user account with the missing data.
onAuthStatusUpdate
Triggered when the user's authentication status in the service provider's system changes. The event payload will include the following properties:
companyObject- The company into whose system the user has authenticated.
statusenum- The user's authentication status in the service provider's system. Currently the only value is
authenticated.
onTaskStatusUpdate
Triggered when the status of a task changes. The event payload will include the following properties:
taskIdstring- The unique identifier for the Task.
productenum- The product relevant to the executed Task. Currently the only value is
deposit. companyObject- The company into whose system the user has authenticated.
statusenum- The current state of the Task. Options are
processing,failedandcompleted. Failed and completed are final states indicating either a successful or unsuccessful Task. depositDataObjectOptional- Data associated with a
depositTask. Present whenproductisdeposit.Child Properties
Optional Properties
accountTypestringThe type of the account. Possible values includesavings,checking, orpaycard.distributionAmountnumberThe amount being distributed to the account. WhendistributionTypeispercent, the number represents a percentage of the total pay. WhendistributionTypeisfixed, this number represents a fixed dollar amount. This value is not set whendistributionTypeistotal.distributionTypestringThe type of distribution for the account. Possible values includetotal,percent, orfixed.lastFourstringThe last digits of the account number.routingNumberstringThe routing number.titlestringThe title of the account. failReasonenumOptional- For Tasks that failed, this is the reason why the Task failed. These are enumerated in the Task Failures section of the UserLink webhooks reference.
onInteraction
Triggered on interactions within Transact. For example, when a user transitions to a new screen or presses the back button. The data passed with the event will be similar to the following:
{
"name": "NAME OF THE EVENT",
"value": "OBJECT CONTAINING EVENT VALUES"
}Details can be found below in the interaction events list.
Interaction events
These are some of the event names which can appear in an onInteraction event.
Viewed Access Unauthorized Page- User did not have a valid token
Viewed Authentication Failed Page- User viewed the page indicating authentication failed
Viewed Authentication Paused Page- User viewed the page indicating authentication paused
Viewed Authentication Success Page- User viewed the page indicating authentication was successful
Viewed Distribution Confirmation Page- User viewed the distribution confirmation page
Viewed Expired Token Page- User has an expired token
Viewed Fixed Deposit Amount Page- User viewed the fixed deposit amount page
Viewed Fractional Deposit Error Page- User viewed the fractional deposit error page
Viewed High Latency Page- User viewed the high latency page
Viewed Learn How You Are Protected Page- User viewed the learn how you are protected page
Viewed Login Page- User viewed the login page
Viewed Login Help Page- User viewed the login help page
Viewed Login Recovery Page- User viewed the login recovery page
Viewed Manual Deposit Instructions Page- User viewed manual deposit instructions page
Viewed MFA Page- User viewed the multi factor authentication page
Viewed Percentage Deposit Amount Page- User viewed the percentage deposit amount page
Viewed Search By Company Page- User viewed the search by company page
Viewed Search By Configurable Connector Page- User viewed the search by configurable connector/payroll provider page
Viewed Search By Payroll Page- User viewed the search by payroll page
Viewed Select From Deposit Options Page- User viewed the select from deposit options page
Viewed Select From Multiple Accounts Page- User viewed the select from multiple accounts page
Viewed Select From Multiple Payroll Providers Page- User viwed the select from available payroll providers page
Viewed Terms And Conditions Are Required Page- User viewed the terms and conditions required page
Viewed Terms And Conditions Page- User viewed the terms and conditions page
Viewed Under Maintenance Page- User viewed a company/payroll provider that is under maintenance
Viewed Welcome Page- User viewed the welcome page
{
"name": "Viewed Access Unauthorized Page",
"value": {
"customer": "Atomic",
"language": "en",
"product": "deposit"
}
}Metadata
When initializing the Transact SDK you can pass in a metadata parameter. This parameter is used to attach key-value data that will be returned in webhook events and client-side events.
Metadata is useful for storing additional, structured information on a Task. As an example, you could store an order ID from your system to track your user's process with a direct deposit or an identifier for a marketing campaign to track users coming from that content. Metadata is not used by Atomic and won't be seen by your users.
{
"order_id": "1234567890",
"campaign_id": "email-marketing-campaign"
}Testing
To aid in testing various user experiences, you may use any of these pre-determined "test" credentials for authentication. Any password will work as long as the username is found in these lists. If the authentication requires an email, simply append @example.com to the end of the chosen username.
Upon submission of your credentials, a test Task is created in Atomic’s system to process the end user’s data. These credentials can be toggled off for production use in the Atomic Console.
These flows operate identically to the way the Atomic system functions in production. Running a test Task will generate the same events and webhooks as a Task run by an end user.
Successful operation
Test where the user's credentials are correct and the task completes. When answering MFA questions, any answer will be accepted.
| Username | Phone Number | Description |
|---|---|---|
test-good | (555) 555-0100 | Test a successful operation. |
test-code-mfa | (555) 555-0101 | Test an authentication that includes a device code based MFA flow. |
test-push-mfa | (555) 555-0102 | Test an authentication that simulates push-based MFA. |
test-question-mfa | (555) 555-0103 | Test an authentication that simulates question-based MFA. |
Error establishing connection
Test where the user encounters an issue connecting to the third-party system.
| Username | Phone Number | Description |
|---|---|---|
test-system-unavailable | (555) 555-0104 | Test the user experience during a third-party system outage. |
test-unknown-failure | (555) 555-0105 | Test the user experience when there is an unexpected error. |
test-session-timeout | (555) 555-0106 | Test the user experience when the auth session has timed out. |
test-connection-error | (555) 555-0107 | Test the user experience when there is a connection error caused by a network failure. |
test-high-latency | (555) 555-0108 | Test the flow which occurs when there is high latency communicating with backend systems. |
test-post-auth-delay | (555) 555-0109 | Test the flow when there is a post-auth delay happening. This may occur due to an unanticipated change in the third-party system. |
test-failure | (555) 555-0110 | Test a failure that occurs after a successful authentication. |
Payroll system configuration
Test where the user encounters an issue with their payroll system configuration or access.
| Username | Phone Number | Description |
|---|---|---|
test-distribution-not-supported | (555) 555-0111 | Test a user who enters an unsupported deposit amount. |
test-routing-number-not-supported | (555) 555-0112 | Test a user whose payroll system rejects the routing number of the target deposit account. |
test-product-not-supported | (555) 555-0113 | Test a user whose payroll system does not allow the operation. |
User issue
Test where there is an error that occurs due to an action of the user.
| Username | Phone Number | Description |
|---|---|---|
test-bad | (555) 555-0114 | Test an unsuccessful authentication. |
test-lockout | (555) 555-0115 | Test a user who has been locked out of their account. |
test-account-unusable | (555) 555-0116 | Test a user whose payroll account rejects the target deposit account. |
test-enrolled-in-paycard | (555) 555-0117 | Test a user enrolled in a paycard, which prevents payment via direct deposit. |
test-expired | (555) 555-0118 | Test a user whose payroll password has expired. |
test-transaction-pending | (555) 555-0119 | Test a user who already has a direct deposit change in progress. |
test-account-setup-incomplete | (555) 555-0120 | Test a user who has not fully onboarded to their employee payroll system. |
test-work-status-terminated | (555) 555-0121 | Test a user who is not an active employee in the payroll system. |
