# About Absolute Labs

## The web3 customer engagement platform

<mark style="color:purple;">The Absolute Labs platform enables</mark> <mark style="color:purple;"></mark><mark style="color:purple;">**Web2 companies**</mark> <mark style="color:purple;"></mark><mark style="color:purple;">to accelerate their transition to Web3, and</mark> <mark style="color:purple;"></mark><mark style="color:purple;">**Web3 companies**</mark> <mark style="color:purple;"></mark><mark style="color:purple;">to automate their customer engagement.</mark>

The platform is built to be used by marketers and product teams to understand their audience.  Using the Absolute Labs platform your team can segment and analyse all wallets on supported blockchains, allowing you to build out a Web3 customer engagement strategy for your organization.  Absolute Labs gives you the tools you need to create sophisticated, cross-channel journeys that pay off in community engagement and loyalty. &#x20;

{% hint style="warning" %}
The Absolute Labs platform, like this documentation, is currently in beta version.\
Some features documented here are not yet available to all users.
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=y-2SAMwmKpE>" %}

## Access

You need an account to use the platform. [Get in touch with our team to schedule a demo](mailto:sales@absolutelabs.io) and start generating ROI in Web3.


# Overview

## From understanding to action

The Absolute Labs platform consists of three modules:

### Insights

{% content-ref url="/pages/mP7DHNYSyAQkWVCn4Bsz" %}
[Insights](/features/insights)
{% endcontent-ref %}

The Absolute Labs Insights module allows you to look into any asset on the blockchain and get deep and comprehensive information on its market data.   Not only that, you can explore the broader portfolios of all the wallets owning a given asset.   By accessing the broader portfolio you can understand your community's web3 interests, their tolerance for risk, their overall wallet buying power and even their mint revenue and minting history. &#x20;

### Audiences

{% content-ref url="/pages/a4mgDyFeSMIPfXX3kpYU" %}
[Audiences](/features/audiences)
{% endcontent-ref %}

The Absolute Labs Audiences module allows you to harness the power of the data available on supported blockchains.  All of a blockchain's wallet history is available to you, and the Absolute Labs querying tool allows you to create segments using on-chain and off-chain data such as portfolio holdings, wallet age, interests, exchanges, and much more. &#x20;

The Audiences module also allows you to import custom lists of wallets that you have gathered or obtained outside the platform.&#x20;

### Flows

{% content-ref url="/pages/C62j9jFT5ydpiWaatoq9" %}
[Flows](/features/flows)
{% endcontent-ref %}

The Absolute Labs Flows module is where the magic happens.  Flows allows you to put analytic insights into action by engaging with the segments you have defined in the Audiences module.  With flows you can onboard new customers, react to transactions on chain, catch opportunities in real-time and engage your community by interacting with then on various channels such as airdrops, Discord, SMS and email.

{% hint style="info" %}
Make sure to check out the [**Use Cases**](/use-cases/upcoming-nft-collection) and [**Guides**](broken://pages/mmQ7jqjeC3AKESCJM3vW) sections from the main menu to discover how the platform can be used to drive engagement and revenue
{% endhint %}


# Insights

## Scope

The Insights section allows you to analyze any asset on the blockchain:

* ERC20 tokens
* ERC721 NFT collections
* ERC1155 NFT collections&#x20;
* Individual wallets&#x20;
* Other key addresses such as exchanges, staking contracts, etc. *<mark style="color:orange;">(soon)</mark>*

## Where do I start?

The Insights tab is broken out into two sections: My Assets and Watchlist.&#x20;

The My Assets list is used to track collections that you own, manage or support on your platform. The Watchlist is used to track any other assets that you'd like to monitor. You can add any asset on the blockchain to either of these lists.

From here, you can click into the individual assets to see detailed insights such as revenue, audiences, holder details, and much more.

You can also search for any asset through the search bar at the top of the screen.


# My Assets

## Your assets and watchlist

Your dashboard features assets that you have marked as being particularly relevant to your organization, along with a watchlist where you can track other assets to monitor.

The purposes of these 2 lists are to:

* provide you with an up to date overview of your assets whenever you log into the platform.
* allow you to keep track of competitors, partners, subsidiaries, sub-collections, etc. in your Watchlist.
* receive suggestions such as new watchlist assets to monitor, relevant audiences and curated flow templates.

{% hint style="info" %}
The assets shown on your dashboard are shared with your whole team. Any added asset will be added for others as well.
{% endhint %}

## Manage your assets

### Adding assets

To add an asset to your dashboard, you can click the plus button directly from the Dashboard in either your Assets or Watchlist section.

![](/files/L1jtMSNjc7SdEMNznMch)

This brings up the full screen search where you can look up any asset and add it to the list.

You can also navigate to any asset from the search at the top of the page or through links within pages of the platform, and click the <img src="/files/VA0QcbN4kN2v7IJmUnHF" alt="" data-size="line"> button in the top right corner of the page. This will then allow you to choose whether the asset should be added to your own Assets or your Watchlist.

### Moving or removing assets

An asset can be moved between lists or removed from your dashboard by putting your mouse over the three dot button on its tile on your dashboard.

![](/files/TzN7ptpLixDMMZ6Bi8dT)

When on an asset page, you can also click the <img src="/files/09acnINnxynKebHGwsl0" alt="" data-size="line">button.


# NFT collections

From the dashboard, you can navigate to different types of assets. Here we outline the features offered for NFT collections.

## Page structure

The top of the page gives, at a glance, the key metrics regarding the collection and its current state, along with third party links, a description and a categorization.

![](/files/ANXVFcr3MEuavZILqqy8)

The rest of the **Market** block provides key metrics about the current activity of the asset, along with unique KPIs such as the monthly active addresses, the number of unique addresses having traded the asset over the last 30 days, etc.

The bottom part of the page contains the deeper analysis of the collection, around 4 key aspects:

* **Insights:** Additional information about the performance and health of the asset through data points such as ownership distribution and daily sales.
* **Investor Profile:** A deeper dive into the holders of this asset and their other on chain activity such as interests and other NFT holdings.
* **Investor Portfolio:** An analysis of the typical portfolio of holders of this asset. Here you'll see information such as typical portfolio distribution and share of portfolio that is invested in this asset.
* **Holders:** A list of every single wallet holding the asset and the ability to view details about it.

{% hint style="info" %}
Investor profile analysis is similar for tokens, NFT collections and custom audiences.\
This is therefore covered in a separate page called [Investor profile](/features/insights/investor-profile).
{% endhint %}

## Mint and revenue

![Example information for the Azuki collection](/files/V1uhzzSMmJmmHVe5kCxu)

### Mint parameters

Absolute Labs allows to study the parameters of the mint of any NFT collection, from the number of wallets having participated, the price, the number of items to how many items were minted for free.

This data can help evaluate how successful collections planned their launch, and how to position your own.

{% hint style="info" %}
The mint data is available for each individual wallet and can be leveraged when creating [segments](/features/audiences/segments).
{% endhint %}

### Revenue

This unique set of indicators gives insights into the success of a collection both from the mint standpoint, and regarding revenue post-mint.

* **Total revenue:** sum of mint revenue and all royalties since then
* **1st week royalties / royalties after:** funds collected during the first week of secondary market trading, and all subsequent royalties. It is common for collections to have a successful first week but to struggle to sustain the hype over time and retain their customers.
* **Royalties:** percentage of all volume being redirected to the project, according to settings on NFT marketplaces.


# Tokens

From the dashboard, you can navigate to different types of assets. Here we outline the features offered for NFT Tokens.

## Page structure

The top of the page gives, at a glance, the key metrics regarding the token and its current state, along with links and categorization.

![](/files/A612mRofoW3mgBnUvkQJ)

Besides key, expected market information, the dashboard provides 2 outstanding indicators.

* **Relevant holders:** the platform allows to better assess the number of holders which are significant from a customer base standpoint. This count focuses on holdings over a threshold in USD value, excluding wallets not belonging to exchanges or otherwise irrelevant.\
  This base of holders is the one studied in the [Investor profile](/features/insights/investor-profile) part of the asset page.
* **Monthly active addresses:** this indicator counts the addresses having sent or received this token on the blockchain over the past 30 days.

The bottom part of the page contains the deeper analysis of the token, around 3 key aspects:

* **Investor Profile:** A deeper dive into the holders of this asset and their other on chain activity such as interests, other NFT holdings, and risk profile.
* **Investor Portfolio:** An analysis of the typical portfolio of holders of this asset. Here you'll see information such as typical portfolio distribution and share of portfolio that is invested in this asset.
* **Holders:** A list of every single wallet holding the asset and the ability to view details about it.

{% hint style="info" %}
Investor profile analysis is similar for tokens, NFT collections and custom audiences.\
This is therefore covered in a separate page called [Investor profile](/features/insights/investor-profile).
{% endhint %}


# Websites

From the dashboard, you can navigate to different types of assets. Here we outline the features offered for websites.

## Wallet Tracker SDK

### Context

The absolute labs Wallet Tracker SDK allows companies to track visits on their website from a Web3 angle and allows several high-value use cases including:

* gauge Web3 footprint among visitors by detecting presence of browser wallets
* track wallet addresses visiting the page, augment your CRM with visits and browser attributes
* attribute traffic, segments, actions and more
* optimize ad spend by focusing on web3 savvy audiences
* segment and engage with profiles leveraging on- and off-chain data including web activity on dapps

The SDK is designed to be as lightweight as possible: 4.5kb library, no dependency, loaded asynchronously.

### Setup

The SDK setup is as simple as adding the following two lines in your website's head tag:

```javascript
<script async src="------ASK YOUR CSM FOR THE JS FILE URL------"></script>
<script>
    window.ALSDK = window.ALSDK || {};
    ALSDK.siteId = 'YOUR PROJECT ID';
</script>
```

where `YOUR PROJECT ID` is to be replaced by the key obtained from the absolute labs platform upon adding your website to your dashboard. Please get in touch with your Customer Success Manager for more details.

## User ID tracking

The SDK allows you to pass it a user ID in order to reconcile visitor context, including wallet presence, and user profile.

To pass a user ID, use the following function on the SDK:

```javascript
ALSDK.externalId = 'userid@mail.com' // Should use your internal user ID format
```

## Event tracking

You can post custom events via the SDK, in order for instance to have accurate conversion reporting based on them.

To trigger the tracking of an event, call the `ALSDK.postCustomEvent` function, for instance as follows:

```javascript
ALSDK.postCustomEvent("Order Successful", "ORDERID-12345")
```

## React to visitors having a wallet

The SDK offers a method to query whether a wallet is present on the user's browser, and which wallet it is.

This requires a slightly different SDK initialization, to handle asynchronous loading of the scripts on your page. Use the following snippet (in which the difference is the `window.ALSDK` line).

```javascript
<script async src="------ASK YOUR CSM FOR THE JS FILE URL------"></script>
<script>
    window.ALSDK = window.ALSDK || {detectWallet:async()=>{return new Promise(async(resolve)=>{document.addEventListener('absolutelabs.walletDetected',(e)=>{resolve(e.detail)})})}};
    ALSDK.siteId = 'YOUR PROJECT ID';
</script>
```

This opens use cases for displaying web3-related content only to visitors you know are savvy, for instance in order to display a banner directing them to a landing page for claiming a branded NFT badge, after providing an email and wallet address.

The SDK exposes an async function to detect if a wallet is present:

```javascript
const info = await ALSDK.detectWallet();
// returns { hasWallet: true, walletType: "MetaMask" }
```

From there, you can use this to for instance display a DOM element conditionally using the following code:

```javascript
<head>
  <script type="text/javascript">
    ALSDK.detectWallet().then(w => {
      if (w.hasWallet === true) {
        document.body.classList.add('has-wallet')
        document.querySelector('.wallet-detected').innerText = w.walletType
      }
    })
  </script>
  <style type="text/css">
    .wallet-only { display: none }
    body.has-wallet .wallet-only { display: block }
  </style>
..
</head>
<body>
..
  <p class="wallet-only">
    This message is visible because you have a wallet in your browser.
    Wallet detected: <span class="wallet-detected"></span>
  </p>
```

## Personalize your page based on Segments

You can use the Absolute Labs Web SDK to check if a visitor's connected wallet address is in a segment you have created in Absolute Labs. To do so, you can call a dedicated method on the SDK:

```javascript
window.addEventListener('ALSDK.ready', function () {
      // Check if there is a connected wallet, and if it is in a given Absolute Labs Segment
      ALSDK.isInSegment('TEAM:SEGMENT_ID') // put your team & segment IDs here
        .then(response => {
          if (response.result) {
            alert('wallet is in segment')
          } else {
            alert('wallet is not in segment')
          }
        });
    });
```

This allows to personalize the browsing experience based on holdings, portfolio value, and an other segment you can create in the platform.


# Mobile Apps

You can instrument your mobile apps to measure traffic, detect wallets and capture them.

Our easy-to-setup SDKs for both iOS and Android allow to measure usage of your app, detect crypto apps on user devices and capture wallet addresses.


# ALSDK iOS Framework

This guide explains how to integrate the ALSDK framework into your iOS app. You can choose either manual integration or the Swift Package Manager (SPM) method. For dynamic development and easier updates, we recommend using SPM.

## Prerequisites

* **iOS Deployment Target:** iOS 12 or later
* **Xcode:** Version 11 or higher
* **ALSDK.xcframework:** The prebuilt framework file

## Integration Options

#### Manual Integration

1. **Download the Framework:**
   * Obtain the `ALSDK.xcframework` folder.
2. **Add to Your Xcode Project:**
   * Open your project in Xcode.
   * Drag and drop the `ALSDK.xcframework` folder into your Project Navigator.
     * **Tip:** Check “Copy items if needed” to include a local copy.
3. **Link the Framework:**
   * Select your app target.
   * Go to the **General** tab.
   * Under **Frameworks, Libraries, and Embedded Content**, click the **+** button, select `ALSDK.xcframework`, and add it.
   * Set the embed option to **Embed & Sign** if required.

#### Swift Package Manager Integration

1. In Xcode, open your project and choose **File > Swift Packages > Add Package Dependency…**
2. Enter the package repository URL.
3. Select the desired version (e.g., “Up to Next Major” starting at 1.0.0).
4. Xcode will download and integrate the package automatically.

## Setup

For the SDK to be active, there are 2 key elements to add to your code.

### Framework initialization

* In your AppDelegate, import the framework at the top of the file:

  ```swift
  import ALSDK
  ```
* And in the `didFinishLaunchingWithOptions` method, add the following line of code:

  ```swift
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
          ....
          _ = ALSDKManager.shared // Add this line to init the ALSDK
          ...
          return true
      }
  ```

This is all it takes to have the SDK monitor your app! Now you need to declare the apps you want to detect.

### Crypto App Detection

On iOS, mobile apps can detect the presence of other apps as long as they declare the list of apps prior to packaging the code.

To enable your app to detect the presence of other apps via canOpenURL, you need to declare the URL schemes in your app’s Info.plist using the **LSApplicationQueriesSchemes** key. Here’s how to do it:

1. **Open Info.plist:**\
   In your Xcode project, select your app target and open its Info.plist file.
2. **Add LSApplicationQueriesSchemes:**
   * Right-click in the Info.plist editor and choose **Add Row**.
   * Set the key to **LSApplicationQueriesSchemes** and its type to **Array**.
3. **List the Schemes:**
   * Under the newly added array, add a new item for each URL scheme you want to query.
   * For the list of apps the ALSDK can detect, and their URL schemes, please refer to [this list](broken://spaces/K7kCO4JzdC97BAAQQzEl).
4. **Save Changes:**\
   Save the file, and your app will now be allowed to call `canOpenURL` on the schemes you've listed.

{% hint style="info" %}
Keep the list of apps to detect lean - 5 is a good number to get started. Make sure to mention to Apple during the review process that there schemes are added because you want to provide a seamless experience for your users when they will connect their crypto wallets to your app.
{% endhint %}

## User ID tracking

The SDK allows you to pass it a user ID in order to reconcile visitor context, including wallet presence, and user profile.

To pass a user ID, use the following function on the SDK:

```swift
ALSDK.shared.externalId = 'userid@mail.com' // Should use your internal user ID format
```

## Event tracking

You can post custom events via the SDK, in order for instance to have accurate conversion reporting based on them.

To trigger the tracking of an event, call the `ALSDK.postCustomEvent` function, for instance as follows:

```swift
ALSDK.shared.postCustomEvent("Order Successful", "ORDERID-12345")
```


# ALSDK Android Framework

This guide explains how to integrate the ALSDK SDK into your Android app. You can choose between manual integration (using the prebuilt AAR file) or adding the dependency via Gradle from a Maven repository. For easier updates and maintenance, we recommend using the Gradle dependency method.

## Prerequisites

* **Android Studio:** Version 4.0 or later
* **Minimum API Level:** 21 or later
* **ALSDK.aar:** The prebuilt SDK binary (if doing manual integration)
* (Optional) **Maven Repository:** Your ALSDK is hosted on Maven Central, JitPack, or another repository

## Integration Options

#### Manual Integration

1. **Download the SDK:**
   * Obtain the `ALSDK.aar` file from our release page.
2. **Add to Your Android Studio Project:**
   * Open your project in Android Studio.
   * Create a `libs` directory under your app module (if it doesn’t exist) and copy the `ALSDK.aar` file into that folder.
3. **Include the AAR in Your Gradle File:**
   * Open your module-level `build.gradle` file and add the following:

     ```gradle
     repositories {
         flatDir {
             dirs 'libs'
         }
     }

     dependencies {
         implementation(name: 'ALSDK', ext: 'aar')
     }
     ```
4. **Sync and Build:**
   * Sync your Gradle files and build your project to ensure the SDK is correctly integrated.

***

#### Gradle Dependency Integration

1. **Add the Repository:**
   * If your ALSDK is hosted on a remote repository (e.g., Maven Central or JitPack), make sure the repository is declared in your project’s root `build.gradle`:

     ```gradle
     allprojects {
         repositories {
             mavenCentral()
             // For JitPack:
             // maven { url 'https://jitpack.io' }
         }
     }
     ```
2. **Add the Dependency:**
   * In your app module’s `build.gradle`, add:

     ```gradle
     dependencies {
         implementation 'io.absolutelabs:ALSDK:1.0.12'
     }
     ```
   * Replace `com.example:ALSDK:1.0.12` with the actual group, artifact, and version of your SDK.
3. **Sync the Project:**
   * Sync your Gradle files so the dependency is downloaded and integrated automatically.

## SDK Setup

For the SDK to be active and functional in your Android app, follow these steps:

### SDK Initialization

Initialize in Your Application Class:

* Create or update your custom `Application` class to initialize the SDK:

  ```java
  // Java Example
  import android.app.Application;
  import io.absolutelabs.alsdk.ALSDK; // Adjust package name as needed

  public class MyApp extends Application {
      @Override
      public void onCreate() {
          super.onCreate();
          // Initialize ALSDK
          ALSDK.getInstance().initialize(this);
      }
  }
  ```
* For Kotlin:

  ```kotlin
  // Kotlin Example
  import android.app.Application
  import io.absolutelabs.alsdk.ALSDK // Adjust package name as needed

  class MyApp : Application() {
      override fun onCreate() {
          super.onCreate()
          // Initialize ALSDK
          ALSDK.getInstance().initialize(this)
      }
  }
  ```
* **Don’t Forget:** Declare your custom `Application` class in your `AndroidManifest.xml`:

  ```xml
  <application
      android:name=".MyApp"
      ... >
      <!-- Other configurations -->
  </application>
  ```

### App Detection (Package Queries)

Starting with Android 11 (API level 30), if your app detects the presence of other apps, you must declare the package names you intend to query:

* **Add Package Queries in `AndroidManifest.xml`:**

  ```xml
  <manifest ...>
      <queries>
          <package android:name="io.metamask.app" />
          <!-- Add other packages as needed -->
      </queries>
      ...
  </manifest>
  ```
* **Note:** Only list the package names required by your SDK for detecting other apps. Keeping the list lean (around 5 packages) is recommended.

## User ID Tracking

To reconcile visitor context and track user profiles, you can pass a user ID to the SDK:

* **Java Example:**

  ```java
  ALSDK.getInstance().setExternalId("userid@mail.com");
  ```
* **Kotlin Example:**

  ```kotlin
  ALSDK.getInstance().externalId = "userid@mail.com"
  ```

### Event Tracking

For accurate conversion reporting and analytics, the SDK provides a method to post custom events:

* **Java Example:**

  ```java
  ALSDK.getInstance().postCustomEvent("Order Successful", "ORDERID-12345");
  ```
* **Kotlin Example:**

  ```kotlin
  ALSDK.getInstance().postCustomEvent("Order Successful", "ORDERID-12345")
  ```


# Investor profile

The profile and typical portfolio of investors is available for tokens, NFT collections, and custom audiences.

{% hint style="info" %}
All data presented here, like everywhere else in the Insights section, is actionable.\
This means you can use these indicators when creating [segments](/features/audiences/segments).
{% endhint %}

## Notable investments

![](/files/KljFedMgd2gL4BpxnHgU)

Absolute Labs provides a view of relevant tokens and NFTs held by a given audience.

This data is aggregated across every wallet studied, and allows to understand at a glance they key assets **collectively held** as well as their exact count and value.

![19% of relevant $SAND owners own MANA tokens, for a cumulated value of 200M USD](/files/Ka4SFgpPARZsZNHfhQKN)

## Interests

![](/files/w19MtZ02dMH7SF3uUHlV)

Absolute Labs leverages on-chain and off-chain data to create proprietary indicators such as interests for every wallet on the blockchain.

This leads to being able to present the interests of any audience, on a 2-axis chart:

* **Interest strength:** measures how important the topic is for investors
* **Holders interested:** indicates how spread this interest is in the audience being studied

Topics in the top right corner are the most important to the audience in both terms.

## Investments

This is the full breakdown of the cumulated portfolio of your studied audience.

![Top holdings by cumulated values for Otherdeed holders](/files/3J2XzafIzrcQUEHdG9Q2)

The table allows to sort the holdings by any column, as well as focusing on tokens or NFTs.

You can also navigate to any asset's page by clicking the eye icon at the end of each line.


# Audiences

Deep-dive into **1.2B+ wallet-first profiles** based on dozens of criteria over on-chain, off-chain and proprietary indicators.

Study your custom audience profiles and portfolios.

Export audience member addresses.

Leverage audiences in [Flows](/features/flows) to interact with them continuously or for scheduled events.

### Segments and lists

Segments are dynamic lists of wallets defined by a set of criteria.

Lists are static lists of addresses, filled manually from the platform or via CSV files or APIs.


# Segments

## Overview

Segments are dynamic lists of wallets defined by a set of criteria.

They can be saved to come back to them at a later time, to analyze the profiles it contains, and to leverage them in Flows.

## Create a segment

To create a segment, use the Create Segment button from the Audiences dashboard.

You can there pick filters from various categories such as Activity, Portfolio, and Interests.

Every filter added reduces the total matching addresses and leads to hyper targeting audiences.

## Export as CSV

To export the members of an Audience to a CSV file, you first have to save it.

Then, click your segment's eye button from the Audiences list to get to its dedicated page. Switch to the Wallet List tab, and locate the export button in the top right corner.


# Custom lists

Custom lists allow you to upload addresses and data to the platform. A list could be a tag from a third party CRM, addresses collected for an NFT allowlist or a manually created list that you manage.

## Create a custom list

1. Go to the 'Audiences' module.&#x20;
2. Click on the 'Create a custom list' button.
3. Insert addresses manually or download the CSV file.&#x20;

> **Note:** Maximum CSV file size = 100 MB

> **Note:** Duplicated addresses will be removed from the custom list.&#x20;

4\. Click on the 'Save' button.&#x20;

> **Note:** Another option to create a custom list is using Add to list block in flows.&#x20;

## Create via API

Custom lists can be created via API, using your team's API key. Upon success, the API responds with the unique numerical ID for your custom list, which you can then use to feed the list with profiles using the next API documented on this page.

### Endpoint

```
https://backend.absolutelabs.app/api/audiences/custom-list/
```

### Request headers

```
- Authentication: Bearer {your API key}
- Content-Type: application/json
```

### Request body example

```
{
  "name": "The name for your Custom List"
}
```

### Response

```
{
  "id": 1337,
  "name": "My new list"
}
```

## Modifying a list via API

To add profiles to a list, remove some, or simply rename a list, you can use the PATCH method on your custom list resource as follows.

### Endpoint

```
https://backend.absolutelabs.app/api/audiences/custom-list/{list_id}
```

### Request headers

```
- Authentication: Bearer {your API key}
- Content-Type: application/json
```

### Request body example

```
{
  "add": ["0xabc...", "0x123...", ...],
  "remove": ["0xabc...", "0x123...", ...],
  "name": "New list name"
}
```

### Response

```
{
  "name_update": {
    "status": "success"
  },
  "addresses_addition": {
    "status": "success"
  },
  "addresses_removal": {
    "status": "success"
  }
}
```


# Flows

Flows allow to create **journeys** for wallets, starting with an on-chain transaction, a new match for a set of criteria (a segment), or even an external trigger, and allowing to leverage various steps to control the flow and ultimately **engage with the customers one by one.**

![](/files/QaAwhUr3pxFxcXKtbXS1)

A flow is built with **steps**, through which wallets are sent. They are the items you can drag from the menu on the left of the editor.

These steps are of different types, all detailed in this section.


# Conditions and delays

![](/files/BLsosQUdfo5qyg10t2hm)


# Wait until

The wait until block allows you to delay the execution of the block following it until a specific date & time.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Wait until block into your flow and click on the ‘Edit’ icon.
3. Specify date & time for the next block to be executed.
4. Save the block.

![](/files/TPYI16ldl8Acq322cnFu)


# Wait for

The Wait for block allows you to delay the execution of the block following it for a specific time.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Wait for block into your flow and click on the ‘Edit’ icon.
3. Specify a delay time.&#x20;
4. Save the block.

![](/files/e0GEpcb78omgiTDk2shw)


# Random split

Random split allows to randomly separate audience into equal parts.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Random split block.&#x20;
3. Connect as many blocks as needed. By default, audience will be equally distributed across exit arrows.

![](/files/N3cqMQo7ea6Y38B03COc)


# Entry Sources

![](/files/BLsosQUdfo5qyg10t2hm)


# Segment source

The segment source block allows you to engage with an audience created using the segmenting feature.

> **Pre-requisites:** To use the segment source, you need to create the segment. \
> See more: [Segments](/features/audiences/segments)

## Enablement

1. Go to the Flows module.
2. Drag and drop the Segments block into your flow and click on the ‘Edit’ icon.
3. Choose the segment from the segment list.&#x20;
4. Specify entrance. Available options:&#x20;

* *Once* - the audience entrance the flow only once.&#x20;
* *Repeated* - the audience entrance the flow several times.&#x20;

&#x20;5\. Specify frequency of *Repeated* entrance. Available options:&#x20;

* *Hourly*&#x20;
* *Daily*
* *Weekly*
* *Monthly*

6\. Specify re-entrancy of *Repeated* entrance. Available options:&#x20;

* *Can re-enter is checked* - Addresses are sent through the flow again if still present when the flow repeats.
* *Can re-enter is not checked* - Addresses cannot be sent more than once through the flow.

7\. Save the block.

![](/files/ZvvZrqqrVxP7j2iX7P6f)![](/files/mFSCg8hAATWJ9lFUN23d)


# List source

The list source block allows to engage the audience from the created custom list.

> **Pre-requisites:** To use the list source, you need to create the \
> See more: [Custom lists](/features/audiences/custom-lists)


# Webhook source

The webhook entry source allows you to send wallets to the flow from third-party services.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Webhook source block into your flow.
3. Save the flow as a draft and open the flow again. You will not be assigned a webhook endpoint until you save the flow as a draft.
4. Copy the endpoint from the Webhook source block. You can now send POST requests to this endpoint to manually push wallets into the flow.

### Request URL example

```
https://webhook.absolutelabs.app/{ID of your Flow}/  
```

### Request headers

```
- X-API-Key: {your key}
- Content-Type: application/json
```

### Request body example

```
[
"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"0xccccccccccccccccccccccccccccccccccccccc"
]
```


# List source

The list source block allows you to engage with the audience from a custom list.

> **Pre-requisites:** To use the list source, you need to create the custom list. \
> See more: [Custom lists](/features/audiences/custom-lists)

## Enablement

1. Go to the Flows module.
2. Drag and drop the Custom list block into your flow and click on the ‘Edit’ icon.
3. Choose a custom list from the drop down.
4. Specify entrance. Available options:&#x20;

* ***Once*** - the audience enters the flow only once.&#x20;
* ***Repeated*** - the audience enters the flow on a cadence.

&#x20;5\. Specify frequency of *Repeated* entrance. Available options:&#x20;

* *Hourly*&#x20;
* *Daily*
* *Weekly*
* *Monthly*

6\. Specify re-entrancy of *Repeated* entrance. Available options:&#x20;

* ***Can re-enter** is checked* - Addresses are sent through the flow again if they are still present when the flow repeats.
* ***Can re-enter** is not checked* - Addresses cannot be sent more than once through the flow.

7\. Save the block.

![](/files/uKVTfhlDo7IdqXOd3PYQ)![](/files/uIh8UqAnvN9ythqU12lL)


# Transaction source

Transaction source tracks any time a user has either received or sent a token or NFT and allows you to take action on that user in real time.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Transaction block into your flow and click on the ‘Edit’ icon.
3. Choose the event to track. Available options:&#x20;
   * Send
   * Receive
4. Choose the asset type.
5. Find the address of a token or NFT to track.
6. If you can’t find the token or NFT by searching its name, insert the contract address and specify the blockchain.&#x20;
7. Save the block.

![](/files/GunuORas2wTYKXDhWoei)

## <br>


# Channels

![](/files/BLsosQUdfo5qyg10t2hm)


# E-mail

The e-mail block in Flow leverages the SendGrid API to send an e-mail to reach out to wallet owners.

> Note: You will need to upload your e-mail/wallet pairs before the flow can be functional. Please reach out to your Customer Success manager to assist with that process.

## Enablement

> Note: Steps 1 & 2 are available only for customer team admins.

> Pre-requisites: To send emails using flow, you need to set up a SendGrid account. Read more about how to do that [here](/use-cases/sendgrid).

1. Navigate to the **My team settings** by selecting **Settings** in the top-right corner.
2. Add a SendGrid API key in the **Email** section.
3. Add a Sender E-mail. For better delivery, use an email verified on your SendGrid account. \
   You can also pass a **custom sender name** by using the following format in the field:\
   &#x20;`Your Name <some@email.com>`\
   \
   ![](/files/gtELtHJplLTdYPJ7FkOH)
4. Go to the **Flows** module.
5. Drag and drop the E-mail block and click on the ‘Edit’ button.
6. Choose the template and fill in the value of variables where necessary.&#x20;
7. **Important -** To handle unsubscribe links, you have 2 options:
   1. Use an **Unsubscribe group ID** from your [Unsubscribe Groups in SendGrid](https://mc.sendgrid.com/unsubscribe-groups). Copy the numerical group ID into the value field for the 'unsubscribe'  variable. Your template's unsubscribe block will automatically generate unique unsubscribe links for each email recipient
   2. Use custom Unsubscribe URLs: you can type them into the unsubscribe and unsubscribe preferences fields.
8. Save the block.


# Webhook

The webhook activation block allows you to send data from a flow to third-party services.

## Enablement

1. Go to the Flows module.
2. Drag and drop the Webhook block into your flow and click on the ‘Edit’ icon.
3. Enter the endpoint to call.&#x20;

> **Note:** The webhook endpoint should be able to get POST requests.&#x20;
>
> Absolute Labs will send wallets in batches of up to 1000 wallets.&#x20;

&#x20; 4\. In case you need additional data, specify additional parameters. If not, save the block.&#x20;

## ![](/files/soqrTti18Rr0fBdp1GKo)

## Additional parameters&#x20;

1. Click on the 'Add field to payload'.&#x20;
2. Specify the field name.&#x20;
3. Choose field type. Available types:&#x20;

* Contact info
* Custom data
* Custom parameter

4\. Specify the field value source. Available sources for types:

* Contact info: Phone, Email, Twitter, Discord.&#x20;
* Custom data: Fields from your team custom dataset.&#x20;
* Custom parameter: Static value. Additionally for custom parameter, specify the field type: String, Number, Boolean and its value. &#x20;

> **Note:** To get to know about custom datasets reach out your Customer Success Manager.&#x20;

&#x20;5\. Save the block.&#x20;

<br>


# XMTP

The XMTP block allows you to use open protocol and network for secure web3 messaging

### Preparation

1. Navigate to the settings page.
2. Connect your wallet in the XMTP section.
3. Click on "Add signature" and wait for the message "You have connected a wallet and are ready to send XMTP messages" to appear.

### Enablement

1. Navigate to the Flows module.
2. Drag and drop the XMTP block into your flow and click on the 'Edit' icon.
3. Enter the message you want to send.
4. Add conversational topic if needed.
5. Save the Block.

![](/files/O2WTS4zjVxnR8vNd5HtA)


# SMS

The SMS block allows you to send SMS messages to wallets that have a phone number associated with them.

> **Note:** You will need to upload your phone/wallet pairs before the flow can be functional. Please reach out to your Customer Success manager to assist with that process.

## Enablement

1. Go to the Flows module.
2. Drag and drop the SMS block into your flow and click on the ‘Edit’ icon.
3. Enter the message. Message limit: 160 characters.&#x20;
4. Save the block.&#x20;

> **Note:** All messages will be sent from the following number:&#x20;
>
> ```
> +18313043477
> ```


# Airdrop

<figure><img src="/files/etrqeRKfKwnCetxjOj7a" alt=""><figcaption></figcaption></figure>


# Token Airdrops

<figure><img src="/files/v2GQqjgvUwtBwo3H77B2" alt=""><figcaption></figcaption></figure>


# NFT Airdrops

<figure><img src="/files/7KMn4tsBHuu1fN0iiqve" alt=""><figcaption></figcaption></figure>


# Custom contract call

You can call any contract on-chain automatically from a Flow, and pass it the wallet addresses of the profiles entering the Airdrop block.

## Setup

To call a contract on-chain as part of a Flow, you use the Airdrop block, in which you select the option "Custom".

<figure><img src="/files/hxuoEbLnTO4vsifVTwn0" alt=""><figcaption><p>Selection of the blockchain on which the contract to call is deployed.</p></figcaption></figure>

To configure the function call, you then:

1. Select the blockchain on which your contract is deployed
2. Paste your contract address in the corresponding field, and click out of the field to trigger a search of the available functions
3. If your contract is verified on Etherscan, the list of available functions should be listed automatically. If not, you will need to copy paste the list of functions in the ABI format.
4. The write functions of the contract, to which one or more wallet address can be passed, will now be available in a dropdown. Select the function to call, e.g. `mintTo(address)`
5. The interface will offer fields for you to specify the values to pass to the various parameters of the contract call. Address fields can be mapped to the addresses which are received by the Airdrop block as part of the Flow
6. Save the configuration when you are done configuring the values to pass to the function parameters.

You can test this on testnets, as illustrated in the screenshot above.


# Data

![](/files/BLsosQUdfo5qyg10t2hm)


# Add to list

Using the add to list block, you can save all wallets that went through a specific block of flow into a custom list.

> See more: [Custom list](/features/audiences/custom-lists)

## Enablement

1. Go to the Flows module.
2. Drag and drop the Add to list block into your flow and click on the ‘Edit’ icon.
3. Choose the custom list from the available or create a new one.&#x20;
4. Save the block.&#x20;

![](/files/PCNJe9A6Hv32XFfYYt0N)


# Creating a flow

![](/files/BLsosQUdfo5qyg10t2hm)


# Access and invites

## Accepting an invite

The first step to use the platform is to be invited by someone on your team, or by your Absolute Labs Customer Success Manager (CSM).

1. You will receive an invitation email. Click the link in the body to confirm your account
2. Click "Got It" in the modal displayed on the platform\
   ![](/files/NlPbB8TnD740648DOwPG)
3. In the next modal, set up a password.\
   ![](/files/zn6ltvDpIeHnfHh32Y6q)
4. Confirm, and that's it: you are all set!

## Inviting teammates

Absolute Labs is built to be used as a team to craft your long-term Web3 strategy together.

1. To bring your colleagues on board, head to the top-right corner of the screen, click on your account button and select "My team".

![](/files/l1KGhleDNIC4gTQzFRt4)

2\. Click the button to add a new user and fill in the form in the modal block:

![](/files/01iTPlegEwVPS3c0y9tq)

> **Note**: The role you pick will define whether the user can invite other teammates (as an admin) or not and manage team settings.&#x20;


# Google Cloud Integration

Absolute Labs is built on Google Cloud.

Google Cloud customers can leverage several integrations to improve their experience with Absolute Labs.

## BigQuery data sync

Customer profiles stored on BigQuery on your side can be merged with the core profiles in the Absolute Labs platform, to allow seamless reading of always-fresh data coming from your own datasets.

To do so:

1. Contact your Customer Success Manager (CSM) to obtain the service account to grant permission to on your table
2. Provide your CSM the BigQuery table ID from which the data should be read.

Automatic mapping is applied, but can be adjusted.

## WRM x Looker

Upon request, customers can get direct access to a BigQuery view grouping all the data on the profiles they have in their Absolute Labs WRM, enhanced with blockchain data such as portfolio value, top holdings, buying power and more. Contact your CSM for details.

## Raw blockchain data as BigQuery views

Absolute Labs offers plans to get access to our proprietary multi-chain, standardized blockchain data warehouse, covering for example:

* holdings, portfolio values, interests, buying power and more for 1B+ wallets across 5+ chains
* standardized cross-chain data allowing to look into wallets, but also fungible and non fungible asset stats across EVM and non-EVM chains with the same queries

These BigQuery views can be used either directly or with tools like Looker to create your own dashboards, reports and alerts.

Contact our sales teams for more information.

## VPC and single tenant on Google Cloud

Traffic between Absolute Labs and your systems can be routed through VPCs to prevent any data from transiting through the internet.

This covers raw data syncs, as well as webhooks used in the [Flows](/features/flows) feature.

Furthermore, the Absolute Labs platform can be deployed as a single tenant platform directly within your Google Cloud environment. Contact our sales teams for details.


# Salesforce B2C Commerce Cloud Cartridge

{% hint style="danger" %}
This page covers the **Alpha** version of the Absolute Labs Commerce Cloud Cartridge, designed to add crypto payments to your B2C Commerce instance. It is subject to change before the connector reaches General Availability.
{% endhint %}

To enable crypto as a payment method on your Salesforce B2C Commerce Cloud instance, you can leverage the Absolute Labs Cartridge which streamlines the integration with Crypto.com Pay and simplifies the tracking back in Absolute Labs.

The cartridge adds a standard payment method and processor, which covers all states of payments from successful to failed, along with management of refunds of placed orders directly from Business Manager.

## Prerequisites

* An HTTPS-enforced SFRA storefront
* The latest `int_absolute_crypto` cartridge code
* An active [Crypto.com merchant account](https://merchant.crypto.com/users/sign_in)

{% hint style="info" %}
With Crypto.com, you have a single company account, and one or more sub-accounts called merchant accounts. However, in Salesforce, you can only have one merchant account for each storefront."
{% endhint %}

## 1. Add the Cartridge to Your Codebase

• Place the `int_absolute_crypto` cartridge inside your cartridges/ directory.

```
your-sfra-project/
├── cartridges/
│   ├── app_storefront_base/
│   ├── app_custom/
│   └── int_absolute_crypto/      <-- 🔹 New cartridge here
```

## 2. Update Cartridge Paths and Enable the Settings Panel

There are two places to do this:

### a. Local `dw.json` (for sandbox development)

In the root of your project, update dw\.json:

```
{
  "hostname": "your-site.demandware.net",
  "username": "your-user",
  "cartridges": "app_custom:int_absolute_crypto:app_storefront_base"
}
```

### b. Business Manager

In BM:

* Go to: **Administration > Sites > Manage Sites > \[Your Site] > Settings**
* Update the Cartridge Path to include `int_absolute_crypto`. Place `int_absolute_crypto` *before* `app_storefront_base` so it can override or extend core behavior if needed.
* Go to **Administration > Organization > Roles & Permissions > Administrator - Business Manager Modules**.
* Select the site you want to enable the Absolute Labs cartridge for, then find and select Absolute Crypto Settings in the list, and click Update.

### 3. Import Metadata

Import the metadata folder into Business Manager.

1\. Go to **Administration > Site Development > Site Import & Export**

2\. Upload the .zip file or point to the metadata/ folder

3\. Import the archive into your site

This sets up the Payment Processor and Method as well as the services to handle payment confirmation and refunds with the payment gateway webhooks.

### 4. Configure the Cartridge

In your Salesforce Business Manager, go to **Merchant Tools** > **Site Preferences** > **Absolute Crypto settings** > **Account settings**, and make sure to provide the following elements:

* Environment: Test is used to validate the integration without requiring actual on-chain transactions. Choose Production when you go live
* Fill in your Crypto.com `secret key` and `publishable key`&#x20;
* Fill in your Absolute Labs API Key under `absolute labs key`
* Copy the Webhook URL display on this page, then head to your Crypto.com merchant dashboard, and open Integration > Webhooks
* Click the Add Webhook button and then paste the Webhook URL copied into Payload URL, then a signature secret for webhook is generated
* Paste this signature secret in the Configure page of Absolute Crypto addon

### 5. Enable the Payment Method

Now that the method exists, enable it on your site.

• Go to **Merchant Tools > Ordering > Payment Methods**

• Make sure the new payment method `AbsoluteCrypto` is active

• Assign it to the `ABSOLUTECRYPTO` processor added previously through the metadata

• Enable it for your site or organization

### 6. Update Checkout UI to Show the Payment Option

This steps depends on the specifics of your website: This is where you add the crypto payment option to your frontend. The cartridge does not provide any specific element for you to leverage here.

The only requirements are properly passing the payment option in the form and hooking it into SFRA's checkout JS to handle selection and form validation.

Assuming your interface leverages radio buttons, it would for instance look as follows in your `app_custom/cartridge/templates/default/checkout/billing/paymentOptions.isml` ISML template:

```html
<div class="payment-option">
    <input type="radio" name="paymentMethod" value="ABSOLUTECRYPTO" id="paymentMethod_ABSOLUTECRYPTO">
    <label for="paymentMethod_ABSOLUTECRYPTO">Pay with Crypto</label>
</div>
```

### 7. Verify Your Integration

You are now all set with the integration. You can run through common test cases such as succesful payment, cancelled, or delayed.


# Upcoming NFT collection

Web2 (luxury, sports, ...) companies and Web3 projects

![](/files/BLsosQUdfo5qyg10t2hm)


# Metaverse company

![](/files/BLsosQUdfo5qyg10t2hm)


# NFT Marketplace

![](/files/BLsosQUdfo5qyg10t2hm)


# Centralized exchange

![](/files/BLsosQUdfo5qyg10t2hm)


# SendGrid

One method to send emails through Absolute Labs is to connect a SendGrid account.

## Setting up a SendGrid instance

If you don't already have a SendGrid account, you'll need to set one up before integrating. Follow the steps below:

1. Sign up for a membership depending on your use case and using the pricing model found [here](https://sendgrid.com/pricing/).
2. Next you will need to login to SendGrid and create a sender identity. SendGrid should automatically prompt you to do so or you can navigate to the link [here](https://app.sendgrid.com/guide). SendGrid will provide you with two sender identity options:
   * **Authenticate a domain -** Allows you to authenticate a domain and send from any address on that domain. This is the industry standard but requires access to the DNS settings of your domain.
   * **Single Sender** - Allows you to set up one email to send emails from. Only recommended for testing as email service providers will append "via sendgrid.net" to the sender.&#x20;
   * Read more about these two options [here](https://docs.sendgrid.com/for-developers/sending-email/sender-identity).
3. Connect your SendGrid account to Absolute Labs using the API Key. Navigate to Settings --> API Keys and click **Create API Key**. Required permissions level - Restricted Access (See the necessary permission list below). \
   Once you have created the key copy it to clipboard.<br>

   <figure><img src="/files/3oy60UMMl9txRiSwF49K" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/883CBl3yGIPafC3AlUqD" alt=""><figcaption></figcaption></figure>
4. Navigate back to your Absolute Labs account and in the top right corner click your account name then Settings. In settings you will see an Email sections with two text boxes:

* **SendGrid API Key -** This is where you paste the API key from the SendGrid account
* **Sender Email -** This is the email that will be used as the sender. Make sure that the email provided here is allowed given the sender identity setup in step 2.

5. At this point, you are ready to start building email templates in SendGrid. \
   Absolute Labs supports **Dynamic Templates -** Learn about creating and editing a dynamic template [here](https://docs.sendgrid.com/ui/sending-email/how-to-send-an-email-with-dynamic-templates).
6. Whenever you create a template, it will be automatically synced over to Absolute Labs and available on the Email block.


# See also

Several additional use cases will be added over time to illustrate specifically how the Absolute Labs platform can be leveraged in various contexts.


