> ## Documentation Index
> Fetch the complete documentation index at: https://docs.extole.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Q2

> Q2 offers digital banking solutions to grow with your business, your account holders, and the communities you serve.

## Overview

With Extole's integration with Q2, you can turn your digital banking channel into a powerful source of new members through personalized incentive programs. The integration requires no custom coding and includes:

* **Fully Integrated In-App Sharing** — members can share their pre-generated link with friends via email, SMS, social, native sharing, or QR code, all without leaving digital banking.
* **Secure Authentication with SSO** — members are automatically verified via JWT when they tap into the program, with no extra login step.
* **Real-Time Data Sync** — the Host Accounts Emitter keeps account and transaction data flowing from Q2 to Extole on an ongoing basis, which can be used to qualify members for program offers based on account and transaction activity, independent of member logins.

## Prerequisites

| Requirement | Description |
| :- | :- |
| Q2 Account | A Q2 Digital Banking account with permissions to request new apps in the Q2 Developer Portal |
| Extole Account | An Extole account with the Q2 integration component and Q2 theme enabled |

## Integration Set Up

### Step 1: Add your Extole team to your Q2 Production Environment

First, add your Extole team to your Q2 environments so that they can assist with testing and troubleshooting.

### Step 2: Request the Extole app from the Q2 App Marketplace

Then, request the Extole app from the [Q2 Marketplace](https://www.q2developer.com/marketplace/apps/extole/marketing). In your request, specify the experience type(s) you'd like to enable and where you'd like to place them. See more information below on experience types.

#### Content Block + Microsite (SSO)

If you are on Q2's Composable Dashboard, you can embed a sharing widget on your main dashboard page using Extole's content block. Users can natively share using their favorite apps directly from the content block without leaving the page. For additional information, users can click on "see details" to be taken to the microsite (hosted by Extole, embedded via SSO.)

In your request to Q2, make sure sure to specify where you'd like your content block to appear. Extole recommends the following places:

* Home Dashboard
* Accounts Page
* Payments & Transfers
* Benefits / Rewards page (if applicable)

<Frame caption="The content block includes several native sharing options. Clicking on &#x22;See details&#x22; takes the user to a referral microsite that's embedded into digital banking via SSO (see below.)">
  <img src="https://mintcdn.com/extole/jfiwIeVafuhmrxvP/images/extole/ff8a56de64727e5947df7f49decfeb4f7998f96ae25bdfb272eb33f809f43e0b.png?fit=max&auto=format&n=jfiwIeVafuhmrxvP&q=85&s=d14525769fb844c7babfa1a2d5eaa825" alt="The content block includes several native sharing options. Clicking on &#x22;See details&#x22; takes the user to a referral microsite that's embedded into digital banking via SSO (see below.)" width="948" height="1142" data-path="images/extole/ff8a56de64727e5947df7f49decfeb4f7998f96ae25bdfb272eb33f809f43e0b.png" />
</Frame>

#### Microsite (SSO Standalone)

You can use the SSO integration on its own if you want to add CTA for your program to your navigation menu. You'll need to work with the Q2 team to create the CTA, so that when a user taps on it, they'll be taken to a microsite (hosted by Extole) within digital banking.

<img src="https://mintcdn.com/extole/_CGkIry01aqhHmSF/images/extole/b03beeafda7401a1c8869692f91b634bf006a20d9aa4ef9a0f6b0b271f812d40.png?fit=max&auto=format&n=_CGkIry01aqhHmSF&q=85&s=e4c14c5082f853119d5d446742554864" alt="The Services menu in Q2 digital banking, with a Refer A Friend tile alongside the other account services." width="944" height="611" data-path="images/extole/b03beeafda7401a1c8869692f91b634bf006a20d9aa4ef9a0f6b0b271f812d40.png" />

<Frame caption="Referral microsite (hosted by Extole) embedded via SSO">
  <img src="https://mintcdn.com/extole/qYz_vh_4-zD_8v2G/images/extole/100f7c47e605b479b3603627192c33cc93ec077da1a988105d0b96fd63d19f87.png?fit=max&auto=format&n=qYz_vh_4-zD_8v2G&q=85&s=7aa1ec8cd21b104dc948530f4fcaf97d" alt="Referral microsite (hosted by Extole) embedded via SSO" width="1270" height="1130" data-path="images/extole/100f7c47e605b479b3603627192c33cc93ec077da1a988105d0b96fd63d19f87.png" />
</Frame>

<Info>
  **If you are using the SSO experience standalone, make sure to provide copy and placement for the CTA to the Q2 team in your request. The CTA copy will be used for link/button that members will click on in digital banking to view the SSO experience.**

  For example:

  -Add menu tile to 'Services'

  -Name: \[Your Program Name]

  -Description: Earn rewards for participating in \{\{companyName}}'s program

  -Icon: hand-with-coins
</Info>

#### Widget

If you are on Q2's legacy dashboard, you can embed a sharing widget to the right hand panel in digital banking.

<Frame caption="The desktop view of the widget">
  <img src="https://mintcdn.com/extole/Y4HlHrsrrzEKq8EE/images/extole/41512de0e7356fd6e4297b2a000c1d7adbf27748e0121e5f1a780ba695615846.png?fit=max&auto=format&n=Y4HlHrsrrzEKq8EE&q=85&s=4fd61bb8ca7b1fa6f8ef5f01aad62f30" alt="The desktop view of the embedded sharing experience." width="1024" height="559" data-path="images/extole/41512de0e7356fd6e4297b2a000c1d7adbf27748e0121e5f1a780ba695615846.png" />
</Frame>

<Frame caption="The mobile view of the widget.">
  <img src="https://mintcdn.com/extole/wCoosrNLYZq4SH58/images/extole/a0bcb31eeacd7c108998486959adc71428b35399e97c8c0be9bd5244e911fe73.png?fit=max&auto=format&n=wCoosrNLYZq4SH58&q=85&s=6f7c86fa15c19604b579f8c4374f4831" alt="The mobile view of the embedded sharing experience." width="1055" height="1791" data-path="images/extole/a0bcb31eeacd7c108998486959adc71428b35399e97c8c0be9bd5244e911fe73.png" />
</Frame>

### Step 3: Configure your integration and deploy to your Q2 environment

Once you've requested the Extole app, the Q2 team will create a deploy ticket in the Q2 Developer Center with all parties subscribed (Extole, Q2, and your team.)

**Configure your integration in My Extole**

Open the Q2 integration in [My Extole](https://my.extole.com/integrations) and work through its sections:

* **Enable Q2 Creative Experiences** — turn on the experience type(s) you requested from Q2 (q2 content block, q2 microsite (aka SSO), q2 widget).
* **Configure Host Accounts Emitter** — enable ongoing account and transaction data synced from your Q2 host system, as described under [Host Accounts Event Emitter Configuration Options](#host-accounts-event-emitter-configuration-options) below.
* **Audit Actions** *(optional, advanced)* — a separate, opt-in sync that runs in parallel to the Host Accounts Emitter. Choose the specific actions you want tracked from Q2's audit actions list (for example, a successful login), on their own lookback window (in minutes) and delivery method.
* **Generate your Wedge Configuration** — your wedge configuration updates automatically based on the settings you configured above. Complete the following steps to finalize your wedge configuration:
  * **Branded Program Domain** — select your branded program domain from the picklist.

  * **Excluded Event Data** *(required for Host Accounts Emitter or Audit Actions)* — any event data fields you want excluded from the data Extole receives from Q2 via these syncs. SSNs and passwords are excluded by default.

  * **Copy the Wedge Configuration and manually configure:**

  * **JWT Key** — generate `jwt_secret`, `jwt_kid`, and `js_integrity` and fill them into the copied configuration. You can do so via the [Extole CLI](/technical/extole-ai-tools/extole-cli) or request this from your Extole support team.

    ```bash theme={null}
    # jwt_secret
    openssl rand -base64 256 | tr -d '\n'

    # jwt_kid — any identifier you choose, e.g.:
    q2-kid-jwt-01

    # js_integrity — computed from your program's core-loader script, then prefixed with "sha512-"
    curl -XGET "https://<your-program-domain>/core-loader.js" > core-loader.js
    openssl dgst -sha512 -binary core-loader.js | openssl base64 -A
    ```

  * **Access Token** *(required for Host Accounts Emitter or Audit Actions)* — from the [Security Center](https://my.extole.com/security-center), scroll to the Access Token section, click **+ New Access Token**, verify your identity, and name and create the token. Copy and save it immediately — you won't be able to view it again after leaving the page.

  * **Copy your values back into the exported wedge configuration** — with `jwt_secret`, `jwt_kid`, `js_integrity`, and (if applicable) your access token generated, manually paste each into its matching field in the wedge configuration you copied out earlier.

**Submit your wedge configuration to Q2**

Once you've generated your wedge configuration, add it to the deployment ticket you opened with Q2 in the previous step — or, if you give Extole access to your wedge configuration in Q2 Developer, ask Extole to add it for you.

**Timeline**

Once your ticket with Q2 support is submitted, your Q2 team will then install the integration for you within a 10 day SLA.

### Step 4: Configure your Extole campaign creatives

Go to the Extole Campaign Editor to modify the newly added creative zones for your Q2 experiences (content block, widget, SSO, etc.)

<img src="https://mintcdn.com/extole/_CGkIry01aqhHmSF/images/extole/c1d627f53df00ddb6a159bc3ba69467b2a988e5a91c0f53dc5e7b691ff5f47a6.png?fit=max&auto=format&n=_CGkIry01aqhHmSF&q=85&s=eaf3c40f59d070d4ea137988bb14b8d7" alt="The Extole Campaign Editor showing the Q2 Content Block creative zone, with a mobile preview on the left and its copy settings on the right." width="910" height="1048" data-path="images/extole/c1d627f53df00ddb6a159bc3ba69467b2a988e5a91c0f53dc5e7b691ff5f47a6.png" />

### Step 5: QA and go live

Once the Q2 team has deployed the extension in production and you've finalized your creatives in your Extole campaign, you'll want to test to make sure the experiences are rendering properly and events are flowing into your Extole campaign. For a live stream of events, navigate to the Q2 integration in My Extole and configure an events stream. After successful QA, both you and your Extole team will approve for go live in the Q2 deployment ticket.

## Data exchanged between Extole and Q2

Data flows from Q2 to Extole through two channels: the JWT payload passed during SSO, and the Host Accounts Emitter.

### SSO (JWT) data

Member data is securely transmitted from Q2 to Extole via JWT at the moment a member authenticates through SSO. By default, Extole will collect the following data parameters in the JWT request; if you'd like to remove any of the default data parameters, you can submit a request to your Q2 team.

| Key | Description | Example Value |
| :- | :- | :- |
| `user_id` required | Unique ID for the user | 246810 |
| `customer_id`required | Unique ID for the customer | 210864 |
| `customer_primary_cif`required | Primary CIF of the customer | 07212010 |
| `email`required | User's email address | `janedoe@example.com` |
| `phone` | User's phone number | 5125551234 |
| `first_name` | User's first name | Jane |
| `last_name` | User's last name | Doe |
| `customer_name` | Customer's name | |
| `address_line1` | First line of the user's address | 1234 Example Rd |
| `address_line2` | Second line of the user's address | Apt 150 |
| `address_country` | User's country | US |
| `address_city` | User's city | Austin |
| `address_postal_code` | User's postal code | 94730 |
| `address_region` | User's region/state | TX |

This data only arrives when a member actively authenticates through SSO — it won't reflect account or transaction activity that happens outside of a digital banking session.

### Host Accounts Emitter data

Q2 also sends **account** and **transaction** records directly from your host system, via two independent, session-less syncs: the account/transaction facts sync (production default) and a separate opt-in sync for specific audit actions like logins or transfers (see [Host Accounts Event Emitter Configuration Options](#host-accounts-event-emitter-configuration-options) below). This is a separate, broader data set from the SSO payload above — it covers all in-scope accounts and transactions, not just the members who've authenticated.

Account record:

```json theme={null}
{
  "event_name": "q2_integration_account",
  "data": {
    "q2_integration_event_id": "<stable-event-id>",
    "customerprimarycif": "0001234567",
    "email": "janedoe@example.com",
    "hostaccountid": "<q2-internal-host-account-id>",
    "productid": "SAV001",
    "accountstatus": "open",
    "dataasofdate": "2026-09-13T00:00:00Z"
  }
}
```

Transaction record:

```json theme={null}
{
  "event_name": "q2_integration_transaction",
  "data": {
    "q2_integration_event_id": "<stable-event-id>",
    "customerprimarycif": "0001234567",
    "hostaccountid": "<q2-internal-host-account-id>",
    "transactionid": "<q2-internal-transaction-id>",
    "hosttrancode": "DEP",
    "txnamount": 500.00,
    "postdate": "2026-09-13T14:02:00Z"
  }
}
```

`q2_integration_event_id` is a stable id Extole uses to dedupe. All `data` field names are sent lowercase. Both records are keyed to the member by `customerprimarycif`.

## Host Accounts Event Emitter Configuration Options

| Setting | Description |
| :- | :- |
| **Lookback Hours** | How far back (in hours) each run looks for new or changed account/transaction records. The emitter won't run until this is set. |
| **Maximum Runtime** | Caps how long a single run is allowed to execute before stopping. Defaults to 23 hours if left unset. |
| **Filter by Product Codes** / **Blacklist Product Codes** | Restrict the emitter to a specific set of account/product codes, or exclude them, depending on whether the blacklist toggle is on. Default is no filter. |
| **Filter by Host Tran Codes** / **Blacklist Host Tran Codes** | Same filtering behavior, applied to transaction codes instead of product codes. Default is no filter. |
| **Probe Missing Accounts** *(advanced)* | Walks accounts one by one to catch branch/core-opened accounts that don't otherwise appear in the enumerated set. Off by default — Q2 hasn't sanctioned this walk rate, so treat it as a last-resort discovery tool only. |
| **Emit Accounts Without Email** | When enabled (default in Extole), accounts without an email on file are still emitted so they're visible in logs, even though they can't be attributed to a member. |
| **Delivery Method** | `batch` or `async`. Defaults to `batch` for the host-account/transaction sync — batch processing dedupes more efficiently and is cheaper to run for larger, less-frequent syncs. |

Every setting above is optional — if left unset, the corresponding filter or behavior defaults to off / no filter, and the emitter simply won't act on it.

See [Host Accounts Emitter data](#host-accounts-emitter-data) above for a sample of what's sent.

## Test Host Accounts and Audit Actions Emitters Locally

You can run both emitters locally from the Q2 CLI. Reach out to your Extole team for instructions.


## Related topics

- [Extole + Q2: Refer a Friend Marketing Kit](/technical/partners/digital-banking/q2/q2-marketing-guide.md)
- [Recent Releases](/news/recent-releases.md)
- [2026](/news/newsletters/2026.md)
- [2025](/news/newsletters/2025.md)
- [How to Set Up Triggered By](/guides/flow-campaigns/how-to-set-up-triggered-by.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.