# Welcome to The Affiliate Platform Help Center

Welcome to the Affiliate Platform Help Center! This resource is designed to assist you in navigating and utilizing our platform effectively. Here, you'll find detailed guides, FAQs, and troubleshooting tips for managing your affiliate network.

{% content-ref url="/pages/IGWqWYHJ7thvLwyUWE9s" %}
[Affiliate platform](/affiliate-platform/affiliate-account)
{% endcontent-ref %}

{% content-ref url="/pages/Y7jgHaO2N3twD4Vk07AE" %}
[APIs & Configurations](/apis-and-configurations/api-keys-and-url)
{% endcontent-ref %}

{% content-ref url="/pages/qdQkJDFqNtY9mqKzqw2C" %}
[FAQs & Connected products](/faqs-and-connected-products/faq-affiliation)
{% endcontent-ref %}

For any additional support, feel free to reach out to our customer service team. We're here to help you succeed!


# Affiliate Account

This section covers the 'Overview' tab in the affiliate profile

## Pending affiliate registration

The affiliate will register from the registration page found at *aff.yourwebsite.com* and will then appear in the backoffice as a Pending affiliate for approval.

<figure><img src="/files/Ai4AA5b8tZh3ZE2QpA9k" alt=""><figcaption><p>List of affiliates pending registrations</p></figcaption></figure>

To approve/decline an affiliate:

1. Select the row of the affiliate.
2. Change the status to ***Approved/Decline*** (check below for more information related to Affiliate Statuses)
3. In case you are approving the affiliate registration, assign an affiliate manager to the affiliate
4. Click ***"Save"***

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

## Affiliate account statuses

<table data-full-width="false"><thead><tr><th valign="top">Account Status</th><th width="128" valign="top">Permission to login</th><th valign="top">Commission calculation</th><th valign="top">Processing incoming registration and sales players data</th><th valign="top">Tracking links functionality</th><th valign="top">Possibility to change to another status</th></tr></thead><tbody><tr><td valign="top"><strong>Pending</strong><br><br><em>Assigned to an affiliate as initial status following affiliate's registration</em>.</td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top">Any other status</td></tr><tr><td valign="top"><strong>Approved</strong><br><br><em>Requires assignment of affiliate manager</em></td><td valign="top"><mark style="color:red;">Yes</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top">Any status except Pending</td></tr><tr><td valign="top"><strong>Declined</strong><br><br><em>Usually assigned to an affiliate if the application doesn't meet the criteria for Approval</em>  </td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top">Any status except Pending</td></tr><tr><td valign="top"><strong>Suspended</strong><br><br><em>Usually assigned to an affiliate for putting the account on a temporary hold.</em> </td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top">Any status except Pending and Declined</td></tr><tr><td valign="top"><strong>Blocked</strong><br><br><br><em>Usually assigned to an affiliate for permanently preventing the affiliate from participating in the affiliat eprogram</em></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark><br><br>The system does not calculate commissions for this period, including sub-affiliate commissions, and later status changes do not trigger recalculations.</td><td valign="top"><p><mark style="color:$warning;">Partial</mark><br></p><p>New registrations arriving from this affiliate are assigned to the Default Affiliate and counted as organic traffic; sales activities from these new players are processed under the Default Affiliate. Sales activities from the affiliate's existing (pre-block) players are completely ignored by the system and not processed at all.</p></td><td valign="top"><p><mark style="color:$warning;">Partial</mark></p><p></p><p>Tracking links redirect to the landing page of the betting site, with no tracking parameters generated.</p></td><td valign="top">Any status except Pending and Declined</td></tr><tr><td valign="top"><strong>Blocked (Data Only)</strong><br><br><em>Usually assigned to an affiliate for permanently preventing the affiliate from participating in the affiliat eprogram</em></td><td valign="top"><mark style="color:red;">No</mark></td><td valign="top"><mark style="color:red;">No</mark><br><br>The system does not calculate commissions for this period, including sub-affiliate commissions, and later status changes do not trigger recalculation.</td><td valign="top"><mark style="color:green;">Yes</mark></td><td valign="top"><mark style="color:$warning;">Partial</mark><br><br>Tracking links redirect to the landing page of the betting site, with no tracking parameters generated.</td><td valign="top">Any status except Pending and Declined</td></tr></tbody></table>

{% hint style="info" %}
Affiliates who register from '[***Same manager URL***](#automatic-approval-of-registered-affiliates)' or a Master affiliate's ['***Invitation link***'](/affiliate-platform/affiliate-account/sub-affiliates-network#how-to-get-reverral-invitation-link) are automatically registered with status *Approved*.\
Check [Different parameters in Registratin page URL](https://help.theaffiliateplatform.com/apis-and-configurations/registration-page#the-page-can-accept-different-parameters-in-the-url) for more details on how to disable auto-approval.
{% endhint %}

{% hint style="success" %}
You can change affiliate statuses in bulk with a multi-select option.\
\
Changes that are not allowed, will be skipped when attempting a bulk status change.\
**Example**: Change status to *Approved* will be skipped for the affiliates that don't have manager assigned.
{% endhint %}

## **Automatic approval of registered affiliates**

When the operator wants his affiliates to automatically be approved and assigned to an affiliate manager, it is possible to give the affiliates a link to register with and be assigned directly to an affiliate manager.

1. Open an affiliate account under the same affiliate manager you would like to assign a new affiliate to
2. Under company details section, copy the link of ***“Same manager URL”*** and give to the affiliate
3. When the affiliate will register to your program from this link, he will be automatically assigned to the same affiliate manager (mgr=2342) and be approved

<figure><img src="/files/2kdXHVbT9PxezLDOO6Lu" alt=""><figcaption></figcaption></figure>

## **Master affiliate**

{% hint style="info" %}
Go to [Sub Affiliates Network](/affiliate-platform/affiliate-account/sub-affiliates-network) for a full overview
{% endhint %}

### How to set up a default Sub-Affiliate commission:

{% hint style="info" %}
Go to [Sub Affiliates Network](/affiliate-platform/affiliate-account/sub-affiliates-network) for a full overview
{% endhint %}

## Brand Tagging

Brand tagging is a setting within the affiliate profile that lets you associate the affiliate with one or multiple brands. This feature is ideal for multi-brand setups and helps you quickly understand which brand/s an affiliate promotes. This tagging is **informational only** and does **not** influence the brand-related conditions defined in deal configurations.

Brand  tags can be added, updated or removed at any time.  It allows you to organize and filter affiliates based on their related brands, improving clasification and internal navigation.

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

## No Negative Carry Over

No Negative Carry Over means that any negative balance of the affiliate is *not* carried over into the next month.\
***Please use this setting carefully***, as it is sensitive and may cause complications in your affiliate program.

{% hint style="success" %}
Example (if No Negative Carry Over is set to ***YES)***:

* July 30th: Affiliate's balance is at $0 on July 30th.&#x20;
* July 31st: A player deposits $1,000, wins big, putting the affiliate's balance at -$10,000.
* August 1st: Affiliate's balance is reset to 0 by making an adjustment (visible to the affiliate).&#x20;
* As is common for winning players, they lose it all back. Suddenly your affiliate’s account is at +$10,300.\
  \
  In this case, the player lost $1,000 total with $300 commission (i.e. 30% RevShare) going to the affiliate, $700 to the operator. \
  Yet the affiliate is owed $10,300, and this is what the affiliate platform will show.
  {% endhint %}

To set up the No Negative Carry Over (also referred to as NNCO):

1. Go to the affiliate's profile
2. Click '*Edit*' on Affiliate Details
3. Enable/Disable **No Negative Carry Over** toggle:\
   \
   If toggle is enabled (YES): Affiliate's negative pending balance will be reset to 0 on the 1st of the following month/s\
   If toggle is disabled (NO): Affiliate's negative pending balance will be carried over to the next month/will not be reset to 0

{% hint style="info" %}
Considering the sesnitivity of this setting, *No Negative Carry Over* can be disabled only per affiliate and not in global settings.
{% endhint %}

## Payment Details

#### Payment Method

The operator can choose which payment methods are available to the affiliates to get paid to, and the payment threshold for each one.&#x20;

The available options for the affiliate program are set in the ***“Settings”*** section.

Each payment method has its unique fields like:

* Bitcoin → Bitcoin address
* Wire transfer → IBAN, Beneficiary, Bank Country, SWIFT etc
* Neteller → Neteller ID, Email

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

The affiliate can choose where he would like to get paid, and update his details. When such details are updated by the affiliate or by the operator an event log will be generated and the update will appear under ***“Change log”***

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

#### Payment Threshold

The payment threshold is the minimum amount of confirmed commission the affiliate will need to earn before a payment can be transferred or appear in the ***“balance report”***. If the minimum payment level has not been reached until the payment date, the amount can be rolled over to the next period.&#x20;

The operator can set the payment threshold for each payment method on a global level from the ***“Settings”*** section, or set it per affiliate in ***“Affiliate Details”*** area as shown below:<br>

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

## Additional Permissions

Operator can control the additional data visible to the affiliate from 'Additional Permissions'.\
These permissions determine what information the affiliate has access to in both reporting and via  API. You can find below a list with all available additional permissions.

1. Go to **'*****Additional permissions'*****&#x20;i**n the affiliate profile
2. Click ***'Edit'***
3. Choose the relevant permissions from a multi-selection list
4. Click ***'Save'***

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

<details>

<summary>List of Additional Permissions</summary>

* Access ***Registrations report**:* Exportable list of registrations of the affiliate
* *See **Activities Count:*** Count of bets made (as reported by platform)
* *See **Bonus amount***: Bonus amount awarded to players balance (as reported by platform)
* *See **Chargebacks***: Chargeback amount (as reported by platform)
* *See **Conversion Rate (Deposit to Registration)**:* Rate in %&#x20;
* *See **Deductions**:* Deductions amount (as reported by platform)
* *See **Deposits Amount**:* Deposit amount (as reported by platform)
* *See **Deposits Count**:* Count of deposits (as reported by platform)
* *See **FTD Amount***: Frst-Time Deposit amount (as reported by platform)
* *See **FTD Count**:* Count of Frst-Time Deposits (as reported by platform)
* *See **FTD Date***: Date of Frst-Time Deposit (as reported by platform)
* *See **Net Deposits**:* Deposit-Withdrawal (as reported by platform)
* *See **Net P&**&#x4C;:* P\&L-bonus (as reported by platform)
* *See **P\&L**:* Bets-wins (as reported by platform)
* See ***QFTD Count***: Count of Deposits that qualified for CPA fee
* See ***QLeads count**:* Count of Registrations that qualified for CPL fee
* See ***Qualification date***: Date of player's deal qualification
* See ***Registration Country***: Country of Registration (as reported by platform)
* See ***Volume (bets amount)***: Amount of bets (as reported by platform)
* See ***Withdrawals and Amounts***: Count and amount of withdrawals (as reported by platform)
* See ***effective CPA**:* (CPA commissions ± registration level Adjustments) / FTD count
* See ***effective CPL**:* (CPL commissions + registration level Adjustments) / registrations count

</details>

{% hint style="warning" %}
To set **default permissions** for all newly registered affiliates, which can later be overwritten on an individual account basis, go to "Settings"
{% endhint %}

## Enable Two-Factor Authentication (2FA)

Two-factor authentication (2FA) is a security system that requires two separate, distinct forms of identification in order to access the platform: a password and a code generated by a 3rd party app (such as Google Authenticator).

To activate 2FA for an affiliate go to ***'Affiliate Details',*** toggle the button on and click Save. Once that is done, an email will be sent with instructions to the affiliate and a QR code to scan through the authentication app.<br>

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

## Enable API Access

Affiliates can pull reporting information without accessing TAP, by using APIs.&#x20;

1. Enable API access by switching the toggle button and click ***"Save & Create API key"***<br>

   <div align="center"><figure><img src="/files/Q2ya1u3yAE4hW0OYGLhF" alt="" width="352"><figcaption></figcaption></figure></div>
2. Click ***"OK"*** in the confirmation modal ***to create an API key***\ <br>

   <div align="center"><figure><img src="/files/wenECnoUqXhen3kGFyxr" alt="" width="563"><figcaption></figcaption></figure></div>
3. Modal with the generated API key will be opened, you can copy it to your clipboard.\ <br>

   <figure><img src="/files/eX1yf3VMlvxkNSreIDgQ" alt="" width="563"><figcaption></figcaption></figure>

## Quick Actions

In the affiliate profile, located at the right top corner, you will find quick actions that allow you to efficiently manage affiliates with just one click.

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

### Reset Password&#x20;

To send an email with a link for password reset, click on "Reset Password".

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

Affiliates can also request password change by clicking 'Forgot Password' button, on the affiliates login page: *admin.aff.yourdomain.com.*<br>

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

### Send 2FA QR Code

To send an email for 2FA configuration, click on "*Send a 2FA QR Code"*&#x20;

<figure><img src="/files/9q4gdGbCDTL0VSmcontP" alt=""><figcaption></figcaption></figure>

Email will be sent to the affiliate, consisting of a Secret code a QR code for 2 Factor Authentication will be sent to the affiliate

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

### View as Affiliate

To simulate the affiliate's login experience, click on ***"View as Affiliate".***

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

{% hint style="warning" %}
This is not an actual login and will not trigger a login in the ***“Login History”*** of the affiliate.
{% endhint %}

## Send Message

To send personal message to the affiliate, click on "***Send Message”*** button.

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

There are 3 types of messages that can be sent to the affiliate.\
The messages templates and designs are controlled in *Marketing* > *Assets*

* ***Popup message*** - this message will appear to the affiliate in case they are logged in. If the affiliate is not logged in, he will get the popup upon his next login within 30 days from sending of the popup.&#x20;

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

* ***Email*** - Email message will be sent to the affiliate's email

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

* ***SMS*** - will be send on the affiliate's phone number. Please, contact your account manager for more information on configuring your IM provider.

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

## Default Affiliate

\
The **Default Affiliate** acts as a system affiliate that does not generate commissions, allows you to create standard deals that can be automatically copied to newly approved affiliates and all organic traffic, is assigned under this affiliate.\
\
To find out the Default Affiliate for your setup:\
\
1\. Go to '*Settings*'\
2\. Check under 'Default affiliate' field\
3\. Go to 'Active Affiliates' and search for that affiliate

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

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

\
***Attribution of organic traffic***

Players reported with an unidentifiable tracker/promo code or with no tracker/promo code are automatically assigned to the Default Affiliate, due to inability to find another matching affiliate. No commission is being generated for the Default Affiliate.

***Default Affiliate Deal:***\
\
In the Default Affiliate profile, you can create standard deal or/and sub-affiliate deal. \
Default deals that are set under this affiliate can be copied to new affiliates automatically upon their account approval.&#x20;

{% hint style="info" %}
Go to  [How to set up a default affiliate deal](/affiliate-platform/managing-deals#how-to-set-up-a-default-affiliate-deal) and [How to set up a default Sub-Affiliate deal](/affiliate-platform/affiliate-account/sub-affiliates-network#how-to-set-up-a-default-sub-affiliate-deal) to find our more.
{% endhint %}


# Sub Affiliates Network

This section covers the Sub-Affiliate Network Structure

## **How to Set Up a Master Affiliate**

Setting up a Master Affiliate can be done in two ways:<br>

1. **Manually:**

* In the Sub-Affiliate account, choose the Parent Affiliate from the drop-down menu under *Overview*
* Click "Save".

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

2. **Sub-Affiliate Registration via Referral/Invitation Link:**

* Parent Affiliates can use their referral links to bring sub-affiliates.
* Affiliates registered via this link are automatically approved and assigned as sub-affiliates to the parent who referred them.

{% hint style="warning" %}
**Note:** Referral link is exposed only if the parent affiliate have sub-affiliate deal set.
{% endhint %}

#### How to get Reverral/Invitation Link:

Grabbing the link is easy, the affiliate should go either to *Affiliate Network* or *Account Settings* and click the '*Copy URL'* button.\ <br>

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

As an operator, go to '***Sub-Affiliate Network'*** in the affiliate profile to copy the Referral link.<br>

## Sub-Affiliate Deals

**Creating a Sub-Affiliate Deal:**

1. In the Parent Affiliate account, go to *Sub-Affiliate Deal*
2. Click “Create”.
3. Select the type of deal and configure the deal.
4. Click “Save”.<br>

<figure><img src="/files/1QQuJ6VupXYkUJRBRqu1" alt=""><figcaption></figcaption></figure>

### **Sub-Affiliate Deal Types**

You can choose between three types of sub-affiliate deals/or combine them in a Hybrid deal:

* **CPA Fee:** Fixed amount per Qualified FTD brought by the Sub-Affiliate.
* **RevShare Cut %:** Percentage from the sub-affiliate's RevShare commission.
* **Net PnL Cut %:** Percentage from the Net PnL of sub-affiliates.<br>

{% hint style="warning" %}
***RevShare Cut %*** is awarded to the master affiliate *only* from players who are in RevShare/Hybrid deal and *only* from the RevShare commission. CPA commission is **not** included.\
***Net PnL Cut %*** is awarded to master affiliate *only* from players who are in RevShare/Hybrid deal. Players who are in a CPA deal but generated Net PnL are **not** contributing to the master affiliate's commission.
{% endhint %}

**Examples:**

{% hint style="info" %}
**CPA Fee:**\
When Sub-Affiliate deal is set to $10 CPA

* Sub-affiliate earns $100 per Qualified FTD.
* Master affiliate earns $10 per Qualified FTD from sub-affiliate.
  {% endhint %}

{% hint style="info" %}
**From Rev.Share:**

When Sub-Affiliate deal is set to 10%

* Sub-affiliate earns 30% of $1000 Net PnL = $300.
* Parent affiliate earns 10% of $300 = $30.
  {% endhint %}

{% hint style="info" %}
**From Net PnL:**

When Sub-Affiliate deal is set to 10%

* Parent affiliate earns 10% of $1000 Net PnL of the Sub-Affiliate = $100.
  {% endhint %}

{% hint style="warning" %}
The commission awarded to the Master Affiliate is paid additionally by the operation, not deducted from the sub-affiliate.
{% endhint %}

### How to set up a default Sub-Affiliate deal

In TAP there is a possibility to create a default master affiliate deal (in the DEFAULT\_AFFILIATE profile) \
Default Sub-Affiliate deal will be copied to newly approved affiliates.\
That means that every newly approved affiliate will be considered a Master affiliate and it will be possible for them to receive commission from Sub-Affiliates.\
Creating a default Sub-Affiliate deal won’t deprive you from the possibility to update manually the Sub-Affiliate deal in any affiliate profile.<br>

1. Go to **Settings**
2. Set "*Copy default sub-affiliate deal on affiliate approve*" to "*YES"*
3. Click **Save**

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

\
3\. Go to the Default Affiliate's account and create a Sub-Affiliate deal. The latest version of this deal will be copied automatically to newly approved affiliates.

### How to modify an existing Sub-Affiliate deal

To change a sub-affiliate deal, you have to click the "edit" button on the already created sub-affiliate deal.\
Any modifications made to the sub-affiliate deal is applied to all players associated with the sub-affiliate/s, and will not trigger retroactive adjustments to commissions for activities that occurred before the change.\
Each sub-affiliate deal version has an **activity period**, defining the timeframe during which the deal terms are applicable. Commissions for activities within this period are calculated based on the deal version active at the time.

{% hint style="warning" %}
Any changes to existing deals, ***including sub-affiliate deals***, take effect starting at 00:00:00 UTC on the day after the modification.
{% endhint %}

### How to assign Master Affiliate to an already approved Sub-Affiliate

You can manually assign Master Affiliate to a Sub-Affiliate who has already been approved, has generated commission of his own and *doesn't have Master Affiliate yet.*\
\
To enable this option:

1. Go to **Settings**
2. Set '*Allow setting parent affiliate when there was no previous parent*' to YES
3. Click **Save** <br>

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

{% hint style="danger" %}
If a Sub-Affiliate is already related to a Master Affiliate and has generated commission of his own, Master Affiliate ***can not be changed/removed*** and Sub-Master Affiliate relation can not be broken.
{% endhint %}

## Multi-Level Affiliate Network Management

Multi-Level Affiliate Network Management enables affiliates to build their own sub-affiliate networks. You can define the network depth limit to determine the structure. This setting specifies the maximum number of levels or tiers within your network hierarchy.

{% hint style="success" %}
Contact your Account Manager (AM) to enable multi-level affiliate network for your operation.
{% endhint %}

**Example of a Multi-Level Affiliate Network with 3 Levels:**

\
**Master X Sub-Affiliate Deal:**

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

<table data-full-width="false"><thead><tr><th width="135">Level</th><th width="156">Sub-Affiliate</th><th width="75">QFTDs</th><th width="125">Net PnL (EUR)</th><th>Commission (EUR)</th></tr></thead><tbody><tr><td>1</td><td>A</td><td>5</td><td>1000</td><td>5x10 + 10% of 1000 = 50 + 100 = 150</td></tr><tr><td></td><td>B</td><td>1</td><td>300</td><td>1x10 + 10% of 300 = 10 + 30 = 40</td></tr><tr><td>Total</td><td></td><td></td><td></td><td><strong>190</strong></td></tr><tr><td>2</td><td>C (referred by A)</td><td>1</td><td>40</td><td>1x7 + 4% of 40 = 7 + 10 = 17</td></tr><tr><td>Total</td><td></td><td></td><td></td><td><strong>17</strong></td></tr><tr><td>3</td><td>D (referred by C)</td><td>2</td><td>300</td><td>2x4 + 3% of 300 = 8 + 9 = 17</td></tr><tr><td></td><td>E (referred by C)</td><td>2</td><td>100</td><td>2x4 + 3% of 100 = 8 + 3 = 7</td></tr><tr><td>Total</td><td></td><td></td><td></td><td><strong>24</strong></td></tr><tr><td>Grand Total</td><td></td><td></td><td></td><td><strong>231</strong></td></tr></tbody></table>

**Level 1:**

* Sub-affiliate A: 5 QFTDs + 1000 EUR Net PnL
* Sub-affiliate B: 1 QFTD + 300 EUR Net PnL
* Master X earns: 150 EUR from A (5 FTDs multiplied by 10 CPA + 100 EUR which is 10% of the 1000 Net PnL), 40 EUR from B (1 FTD multiplied by 10 CPA + 30 EUR which is 10% of the 300 Net PnL)
* Total commission: 190 EUR

**Level 2:**

* Sub-affiliate C (referred by A): 1 QFTD + 40 EUR Net PnL
* Master X earns: 17 EUR from C
* Total commission: 17 EUR

**Level 3:**

* Sub-affiliate D (referred by C): 2 QFTDs + 300 EUR Net PnL
* Sub-affiliate E (referred by C): 2 QFTDs + 100 EUR Net PnL
* Master X earns: 17 EUR from D, 7 EUR from E
* Total commission: 24 EUR

**Total Commission Generated for Master X:**

* From all network levels: 231 EUR

{% hint style="danger" %}
**Note:** Consider the potential expenses associated with sub-affiliate commissions, as costs may escalate with a larger network.
{% endhint %}

**Network of Parent/Master Affiliate:**\
\
To see the network of a Parent Affiliate, the commission generated from sub-affiliates (from each level) and what is the sub-affiliate deal based on which Parent Affiliate is generating commission:

1. Go to the parent/master affiliate profile and select ***“Affiliate Network”***.
2. Filter results by time frame or show only sub-affiliates who have brought commissions.&#x20;

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

You can also build a Media Report to see all parents and the commissions they have generated from their sub-affiliates for a selected period of time.<br>

#### **How can Parent Affiliate see their network:**

* Parent affiliates can see network details in their account.
* Personal details of sub-affiliates are not exposed to the parent affiliate.<br>

<figure><img src="/files/989HAPfoO0UYayq1PEIp" alt=""><figcaption></figcaption></figure>


# Managing Deals

This section covers deal management

## How to Create Affiliate Deals

Affiliate deals can be very flexible and they can get very complex based on the criteria and qualification rules.

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

\
To create a deal:

1. Enter the affiliate profile
2. Click on ***“Deals”*** tab –> Deals
3. Click ***Create Deal***
4. Choose a *Name* and *Type* for the deal group. You can choose from several deals types, including Hybrid:

* **CPA**
* **CPA + Revshare (by Net Deposit or Net P\&L)**
* **CPL**
* **CPL+CPA**
* **CPL + Revshare (by Net Deposit or Net P\&L)**
* **Revshare (by Net Deposit or Net P\&L)**

### Deal Entry Criteria

Affiliate deals can carry a set of matching conditions, so called deal entry criteria. They are used to filter traffic that enters the deal - from a deal that applies to any traffic to a deal that applies only to traffic that come from a specific source, country, brand, campaign.

#### How deal matching works

When a player registers, the system checks their details against the deal’s entry criteria. The player is added to the deal only if **all criteria are satisfied**. If sub-deals are configured, the system will first check whether the player matches any of the sub-deals. If no sub-deal matches, the player will fall back to the default deal configured for the main group. For more information, see [Drill down the Deals (Sub-Deals)](#drill-down-the-deals-sub-deals).\
\
Criteria set to **“Any”** allow all players to pass the criteria. However, if a specific criteria is set, only players who meet the defined conditions will be matched to the deal.\
\
Players that fail to meet even one of the required criteria will remain outside the deal. *(e.g. player from Canada won't enter a deal set for countries Spain, Mexico and Argentina.)*

| Countries    | The country the player registered from                                                           | Applies to players from any country            |
| ------------ | ------------------------------------------------------------------------------------------------ | ---------------------------------------------- |
| Brands       | Which brand the player registered on                                                             | Applies to players from any brand              |
| Campaign     | The marketing campaign ID tagged on the affiliate's tracking link                                | Applies to every player regardless of campaign |
| Source ID(s) | The traffic source tagged on the tracking link (e.g. which channel/media source drove the click) | Applies to every player regardless of source   |

#### Countries

{% hint style="success" %}
***For example:*** Affiliate will receive 150 CPA for players from Canada, while a 120 CPA rate will apply for players from all other countries.
{% endhint %}

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

#### Campaigns

{% hint style="success" %}
***For example:*** Christmas campaign will have a 200 CPA deal whilst any other landing page and resources will be paid 150 CPA. When a user comes from the specific Christmas resources (Emails, Landing Pages etc), they will be registered under the 200 CPA deal.
{% endhint %}

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

#### Brands

{% hint style="success" %}
***For example:*** Players from DemoBrand will be paid for at a 15% RevShare rate.
{% endhint %}

{% hint style="warning" %}
An affiliate’s access to tracking links and promotional materials is determined by the brands included in their deal. Deals limited to specific brands restrict the affiliate’s access to those brands only.

Affiliates with an **“Any Brand”** deal have access to all brands and can generate tracking links for any of them.
{% endhint %}

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

#### Activity Dates

\
A deal can be configured with any of the following date settings:

* **No start date and no end date** - the deal is active from creation date and until indefinitely.
* **Start date only** - the deal becomes active from the specified date and remains active indefinitely.
* **End date only** - the deal is active from creation date until the specified end date.
* **Both start and end dates** - the deal is active only within the specified date range.

{% hint style="danger" %}
Only a ***future date** is accepted.*\
A deal cannot be activated or deactivated retroactively.
{% endhint %}

{% hint style="warning" %}
Players assigned to the deal before the expiration date, can continue to generate commission even after the deal has expired. However, newly registered players will not be able to enter the deal once it has expired.\
To ensure continued tracking and commission generation, make sure the affiliate has at least one active deal in place at all times.
{% endhint %}

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

### Drill down the Deals (Sub-Deals)

Each deal can have sub-deals based on the same criteria of the parent deal with just 1 or more parameters which can be different.\
You can set sub-deals based on different criterias, such as: *Country, Brand, Campaign, Product.*

{% hint style="warning" %}
Players are assigned to the most suitable sub-deal. Only if there is no match between the player and the sub-deal criterias, the players fall back to the parent deal - if it is a fit.
{% endhint %}

To create a sub-deal, click on the **“+“** sign on a deal.\
Your sub-deal will be created under the ***parent deal*** with the new conditions set. See below examples of deal structures:

{% hint style="success" %}
***Use case 1:***\
A deal can have 100 CPA for all brands together (set as “Any“), but for brand "DemoBrand" and registration country IT, a sub-deal will have a 300 CPA. In this case, affiliate will receive 300 CPA for players from brand "DemoBrand" with registration country IT, but for any other players, will receive 100 CPA.<br>

Deal ***408368*** is a parent deal, while

* Deal ***408369*** is its sub-deal
  {% endhint %}

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

{% hint style="success" %}
***Use case 2:***\
A deal can have 0 CPA, but for registration country AL, a sub-deal will have 100 CPA and for registration country BT, a sub-deal will have 200 CPA. In this case, affiliate will receive commission only for players with registration country AL and BT, because players from any other country will enter the Parent deal with 0 CPA and affiliate won't be rewarded for them.\
\
Deal ***408352*** is a parent deal, while

* Deal ***408353*** is its sub-deal
* Deal ***408354*** is its sub-deal
  {% endhint %}

<figure><img src="/files/2hlO0bwlegrMDD1RDXKX" alt=""><figcaption></figcaption></figure>

### CPA and CPL deals / Qualification Rules

For CPA and CPL deals you can set rules that will define the minimum requirements for the CPA/CPL to “kick in” and for the user to be qualified.

#### Net Deposit Qualified:

Baseline set by Net deposit accumulated (Net Deposit = Total Deposit-Total Withdrawals).

{% hint style="success" %}
***For example:*** When this baseline is set to €20, and a user deposits €10 he will not be qualified until he reaches €20 net deposit. With another €10 he will reach it, unless he made a withdrawal which in this case he will not be qualified until his net deposit will be above the baseline set for the deal.
{% endhint %}

#### Total Deposit Qualifier:

Baseline set by the Total Deposit amount accumulated.

{% hint style="success" %}
***For example:*** When a baseline is set to €20, and a user deposits €10 he will not be qualified until he reaches €20. With another €10 he will reach it regardless if he made a withdrawal or not.
{% endhint %}

#### FTD Qualifier:

Baseline set by the First Deposit amount of the user, not accumulated.

{% hint style="success" %}
***For example:*** When a baseline is set to €20, and a user makes his first deposit of €10 he will not be qualified ever, regardless if he makes another deposit which together with the first one covers the baseline of €20.
{% endhint %}

#### Volume Qualifier:

The amount of minimum playthrough (wagering) done by the user in order to qualify for the CPA.

#### Activity Count Qualifier:

The count of bets made by the user. You can set a total count of bets needed from the user before he will be qualified.

Please note that activity count qualifier is integration-dependent, consult with your account manager before using this qualifier.

{% hint style="success" %}
***For example:*** A user that will deposit €100 and will cover a baseline of €20, will not be qualified until he meets the bet count requirements, this way he cannot make a deposit and immediately after cash it out, for the affiliate to receive the CPA. Recommended – Set this qualifier for at least 1 activity.
{% endhint %}

#### Enabling tiers for CPA deals

For CPA based deals, you can set tiers that will define the minimum and maximum CPA fee that will be awarded to the affiliate.\
Tiers are calculated based on the **total** number of CPA qualified registrations **per affiliate** for the **current calendar month**

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

* 0-199 the affiliate gets 50 CPA
* 200-499 the affiliate gets 60 CPA
* 500-999 the affiliate gets 70 CPA
* 1000+ the affiliate get 80 CPA

### Revenue Share Deals

The revenue share deal is mechanism by which our platform and affiliates establish a shared revenue model, wherein affiliates receive a predetermined percentage of the generated revenue from their referred players. This transparent and mutually beneficial arrangement ensures that both our platform and affiliates can effectively capitalize on the fruits of their collaborative efforts, promoting sustained growth and financial success.

#### **Revenue Share, Net Deposit**

The percentage of revenue share is calculated based on the players' accumulated net deposit amount by deducting expenses.\
The formula based on which Net Deposit is calculated in Revenue Share deals is customizable.\
Check below the possible options:<br>

**Version 1:&#x20;**<mark style="background-color:yellow;">**(Total Deposit Amount) - (Total Withdrawal Amount)**</mark>\
**Version 2:&#x20;**<mark style="background-color:yellow;">**(Total Deposit Amount) - (Total Withdrawal Amount) - (Chargeback)**</mark>\
**Version 3:&#x20;**<mark style="background-color:yellow;">**(Total Deposit Amount) - (Total Withdrawal Amount) - (Bonus)**</mark>\
**Version 4:&#x20;**<mark style="background-color:yellow;">**(Total Deposit Amount) - (Total Withdrawal Amount) - (Chargeback) - (Bonus)**</mark><br>

{% hint style="warning" %}
*Chargeback* and *Bonus* amounts can be added to/removed from the Net Deposit formula upon deal creation/deal modifying by applying the settings below.\
*The formula settings are applicable only to the Revenue Share component in a deal*<br>

![](/files/hcVj2wTnlqGyTZeo4GdG)\
\
\
Regardless of this deal setting, **Reports** will display the Net Deposit value using the standard formula: *(Total Deposit Amount) - (Total Withdrawal Amount) - (Chargebacks).*
{% endhint %}

#### **Revenue Share, Net PnL**

The percentage of revenue share is calculated based on the total amount of bets and winning bet amounts that are played by the player by deducting the bonus amount given by the operator and including other expenses.

<mark style="background-color:yellow;">**(Total Bet Amount - Total Win Amount) - (Bonuses) - (Deductions)**</mark>

{% hint style="warning" %}
Confirm with your platform provider if *Deductions* data is being reported to the affiliate platform.\
\
***Total Bet Amount - Total Win Amount*****&#x20;is reported by your platform as final PnL (GGR) value**
{% endhint %}

#### Qualify the Rev Share on CPA:

This option gives you the possibility of starting the Revshare component in a Hybrid deal only once the conditions are met, there are 3 (three) options for conditions:

* (Based on Net Deposit) - Revshare is activated when NET deposit amount covers the CPA Fee component that was paid or in potential to be paid after CPA qualification.

{% hint style="success" %}
***For example:*** In a Hybrid deal of €100 CPA+30% RevShare (based on Net PnL or Net Deposit), the Revshare will start growing only when the user deposited equal to or more than €100.\
If a user deposited €50, the commission will be €100 (no RevShare), and when the user deposits €100 the commission will be €130 (CPA + 30% RevShare).
{% endhint %}

* (Based on NetPnL) - Revshare is activated when NetPnL amount is higher than CPA component or NetPnL is negative (player is winning). When player is loosing, more than CPA fee amount, the revshre component will be calculated on the difference between NetPnL to CPA Fee.

{% hint style="success" %}
***For example:*** In a Hybrid deal of €100 CPA + 30%, the Revshare will be activated only when the user losses more than €100 or when user is winning.

Case 1: User deposits €200 - Fee is €100 (only CPA)

Case 2: User deposits €200 and loses 50 - Fee is €100 (still only CPA)

Case 3: User deposits €200 and loses 150 - Fee is €100+€15 (revshare component is activated on the difference between NetPnL to CPA fee: 150-100=50 >> 30% of 50 = 15)

Case 4: User deposits €200 and wins 100 - Fee is €100 - €30 = €70
{% endhint %}

* (Based on Revshare commission) - Revshare is activated when the *potential* Revshare Fee amount is higher than CPA component or Revshare is negative (player is winning). When a player is losing and generating Revshare more than CPA fee amount, the revshare component will be calculated on the difference between Revshare to CPA Fee.

{% hint style="success" %}
***For example:*****&#x20;In a Hybrid deal of €100 CPA + 50%, the Revshare will be activated only when the user generates Revshare fee more than €100** (loses more than €200 on a 50% Revshare deal) or when the user is winning and generating negative Revshare fee)

Case 1: User deposits €200 - Fee is €100 (only cpa)

Case 2: User deposits €200 and loses €150 - Fee is €100 (still only CPA), potential revshare fee is still only €75 (50% of €150) and still does not cover the CPA fee

Case 3: User deposits €400 and loses €300 - Fee is €150 = (€100 (cpa) + €50 Revshare)\
(Revshare component is activated on the difference between RS to CPA fee:\
50% of €300 = €150 (potential RevShare > €100 reaching point)\
€50 = €150 - €100 (difference between RS and CPA)\
Case 4: User deposits €200 and wins €150 - Fee is €25 = (€100 - €75)
{% endhint %}

#### **No negative Revenue Share**

You can enable No Negative Revenue Share for every deal that has a Rev Share component (Rev Share, Net Deposit; Rev Share, Net PnL or Hybrid deals with Rev Share component).\
This setting ensures that the fees generated from the players under this deal will never be negative.\
\
**How does it work:**\
If the *potential* Revenue Share fee is negative (i.e. player wins), the system will calculate the Revenue Share fee as 0.\
Once the *potential* Revenue Share fee becomes positive (i.e. player loses), the system will begin calculating Revenue Share fee for the affiliate, as usual.\
Affiliate can generate only positive Revenue Share from players in this deal, but positive Revenue Share fee will be calculated taking into account total Net PnL/Net Deposit of the players.

{% hint style="success" %}
***For example***: In a Rev Share deal of 10% RS with No Negative Rev Share\
\
On 01/01: Player loses 1000€\
-> Revenue Share fee will be: 100€\
\
On 02/02: Player wins 2000€\
-> Total Net P\&L of this player will be: -1000€\
-> *Potential* total Revenue Share fee will be: -100€. No negative Rev Share will be calculated for the affiliate, RevShare fee will be 0€\
\
On 03/03: Player loses 3000€\
-> Total Net P\&L of this player will be: 2000€\
Revenue Share fee will be: 200€
{% endhint %}

{% hint style="warning" %}
Please, note that in order to ensure the data accuracy and stability of fees calculation, players from deal with No negative Rev Share setting can not be migrated to a new deal version using[ "Change for existing users.." ](#change-for-existing-users-in-the-current-deal-group-from-tomorrow)option.
{% endhint %}

#### **Enabling Tiers to the Rev.Share**

For Net Deposit and Net PnL based revenue share deals, you can set one of the three different types of tiers that will define the minimum and maximum percentage for the user to be qualified.<br>

1. **Reached Amount:** The affiliate earns a commission percentage based on the **sum of NetPnL amount** generated in the **current calendar month** for players within the same deal-group. The affiliate is remunerated through a "*Rev-Share Tier Fact*" Adjustment which represents the daily difference between the commission amount generated by the base rev-share percentage and the target percentage.

{% hint style="warning" %}
Regardless of the RevShare structure (based on Net PnL or based on Net Deposit), the 'Reached Amount' taken into account is the accumulated Net P\&L.
{% endhint %}

{% hint style="success" %}
***For example:*** Throughout the current calendrical month, the revenue share is calculated using the cumulative (sum) NetPnL amount generated. If the affiliate surpasses the specified threshold for level X in total NetPnL, the excess amount is granted to the affiliate as a "*Rev-Share Tier Fact*", representing the difference between the base percentage and the level percentage.
{% endhint %}

<figure><img src="/files/2xSirxxcJq9tOIgLWJBj" alt="" width="563"><figcaption></figcaption></figure>

* 0 - 500 the affiliate earns %25 Revenue Share
* 500 - 1.000 the affiliate earns %30 Revenue Share
* 1.000 - 2.000 the affiliate earns %35 Revenue Share
* 2.000 + the affiliate earns %40 Revenue Share<br>

2. **Reached FTDs:** The affiliate earns the commission percentage based on the count of the first-time depositors brought during the **current calendrical month**. This applies to players within the same deal group, regardless of the deal version, as long as their first-time deposit occurs during the current calendar month

{% hint style="warning" %}
Once a tier is reached, the corresponding **revenue share percentage becomes permanently associated with those players**. Any commission previously generated under a lower tier **is not recalculated**.
{% endhint %}

{% hint style="success" %}
***For example:***\
In January, the affiliate brings **25 first-time depositors (FTDs)**.

* For the **first 9 players**, the affiliate earns **25% RevShare**. Even if a higher tier is reached later in the month, these players will **continue generating 25% RevShare** going forward.
* For players **10 to 19**, the affiliate earns **30% RevShare**. If the affiliate later reaches another tier, these players will **continue generating 30% RevShare** in the future.
* For players **20 to 25**, the affiliate earns **35% RevShare**, which will **remain fixed for those players** in future calculations.
  {% endhint %}

<figure><img src="/files/u6G0hatRfrXWZ2n1WyQ2" alt="" width="563"><figcaption></figcaption></figure>

* 0 - 10 FTDs the affiliate earns %25 Revenue Share
* 10 - 19 FTDs the affiliate earns %30 Revenue Share
* 20 - 29 FTDs the affiliate earns %35 Revenue Share
* 30+ FTDs the affiliate earns %40 Revenue Share<br>

3. **FTDs+Recalculation:** The affiliate earns the commission percentage based on the coiunt of the first-time depositors brought during the **current calendrical month**. This applies to players within the same deal group, regardless of the deal version, as long as their first-time deposit occurs during the current calendarical month.

{% hint style="warning" %}
Once a tier is reached, the **new revenue share percentage** becomes permanently associated with the player. Any commission previously generated for that player is **recalculated** based on the newly acquired percentage.
{% endhint %}

{% hint style="success" %}
***For example:***\
In January, the affiliate brings 2**5 first-time depositors (FTDs)**.

* For the **first 9 FTDs**, the affiliate earns **25% RevShare** until a higher tier is reached.
* When the **10th FTD** is acquired, the RevShare rises to **30%** for all FTDs from January (the first 9 players and the 10th player and any subsequent players). Previously generated commissions are **recalculated at 30%**.
* When the **20th FTD** is acquired, the RevShare rises to **35%** for all FTDs from January. Previously generated commissions are **recalculated at 35%**.
  {% endhint %}

<figure><img src="/files/Hp3kLbLiSmXEaDN4oi5U" alt="" width="563"><figcaption></figcaption></figure>

### Multi-product Revenue Share Deal

Multi-product Revenue Share is a mechanism that allows operators to assign unique Rev Share % rates based on the product type of players' activities.

{% hint style="warning" %}
Contact your CSM to enable Multi-product Revenue Share\
To calculate RevShare fees per product, your platform must report to the affiliate system the players' wagering values for each product separately\
\
**Supported products:**

* Casino
* Sport
* Lotto
* E-sport<br>

Please specify which products your operation will use, or request support for any products not currently on the list.
{% endhint %}

#### How to set a Multi-product Revenue Share Deal

1. When creating a deal, switch the toggle 'Multi-product' to Ye&#x73;*.*
2. Once toggled, you can specify the RevShare percentages for each product.

RevShare fees will be generated for the affiliate based on the generated Net PnL/or volume from the respective product.\
Multi-product can be enabled for Rev Share deals, based on Net PnL, or Hybrid deals with the same component.

{% hint style="warning" %}
**RevShare (Lotto)** is calculated based on **Volume (wagering)**

**RevShare (Casino), RevShare (Sport), RevShare (Esport)** are calculated based on **Net PnL**
{% endhint %}

{% hint style="success" %}
*Example 1: (see screenshot below)*\
\
When multi-product deal is set to 15% RevShare for **Casino,** 10% RevShare for **Sport** and 5% for **Lotto:**\
\
If the player ***lost*** 500 EUR on Casino, ***lost*** 1000 EUR on Sport, and ***wagered*** 100 EUR on Lotto, RevShare fee for the affiliate will be 75 EUR for Casino, 100 EUR for Casino, and 5 EUR forLotto.\
In total, affiliate will earn 180 EUR RevShare fee (75 + 100 + 5)
{% endhint %}

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

{% hint style="success" %}
*Example 2: (see screenshot below)*\
\
When multi-product deal is set to 20% RevShare for Casino, 15% RevShare for Sport and 5% RevShare for E-sport:\
\
If player ***lost*** 200 EUR on Casino, ***lost*** 100 EUR on Sport, and ***won*** 500 EUR on E-sport, RevShare fee for the affiliate will be 40 EUR for Casino, -15 EUR for Sport, and 25 EUR for E-sport.\
In total, affiliate will earn 30 EUR (40 + 15 + (-25)
{% endhint %}

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

{% hint style="danger" %}
**Important:** Once deal is saved as Multi-product or Single-product, this setting can't be changed, while other configurations, such as RevShare %, can be edited as usual.
{% endhint %}

### How to set up a default affiliate deal

TAP gives the possibility to createa a default deal that will be copied to newly approved affiliates automatically upon approval.\
Creating a default deal in the Default Affiliate won’t deprive you from the possibility to update manually the deal/s in the affiliate profile.\
\
To enable copying of default affiliate deal to newly approved affiliates:

1. Go to **Settings**
2. Set '*Copy default deal on affiliate approve'* to '*YES'*
3. Click **Save**

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

To create a default affiliate deal;

1. Go to the Default Affiliate account
2. Follow the steps in [*'How to Create Affiliate Deals'*](https://help.theaffiliateplatform.com/affiliate-platform/managing-deals#how-to-create-affiliate-deals) section.<br>

### Deleting Deals & Deal History

{% hint style="danger" %}
Please be cautious when deleting a deal, as this action is **irreversible**!\
Players who were assigned to this deal will remain associated with it after deal deletion.\
Once a deal is deleted, you will no longer be able to adjust or restore it.\
\
If you need to make changes, consider [modifying the existing deal](#modifying-existing-deals) instead.
{% endhint %}

TAP saves all deal versions in chronological order, and you will be able to see the total count of players associated with a specific deal version, even if not active anymore.

* To delete a deal, you need to make sure the deal is not the default deal.
* When you want to delete the 'Home' deal (or if the affiliate has only 1 deal), you will have to create a new deal, just so you can make it a 'Home' and then delete the one you want.
* To make a deal default, click on the ***“Home”*** button<img src="/files/K7KDnDmZnzeaFBSrvEzH" alt="" data-size="line">
* To delete a deal, click on the ***“Bin”*** button<img src="/files/LroKQWRJhy3EGAHNDzQu" alt="" data-size="line">

Click on ***“Show Inactive deals”*** at the top right of the deals interface to view the version history of the deals.

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

Click on the ***“Eye”*** symbol to view the deal structure and the qualification requirements.<br>

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

### Modifying existing deals

To make changes to existing deals, follow these steps:

1. Click on ***"Deals"*** tab -> Deals
2. **Choose the deal you want to modify** from the list of active deals and click the *'change'* icon\
   \ <br>

   <figure><img src="/files/kMKUzn0IW6EghRqAgRWq" alt=""><figcaption></figcaption></figure>
3. **Edit Deal Details**: Modify the deal's qualification rules, commission or associated parameters that you want to be relevant for the new deal version.

{% hint style="warning" %}
Each new version must have a unique name, as versioning creates a new deal configuration with its own settings, activity period, and associated players. This ensures clear version tracking and identification.
{% endhint %}

4. **Save Changes:** Click the "save" button to confirm and implement the modifications

#### What Happens Next?

After saving the changes, the following actions occur:

* **New Version Creation**: A new version of the deal is created. The new version is valid from 00:00 UTC on the following day.
* **Old Version Deactivation**: The original deal version is deactivated and saved in version history as of 00:00 UTC on the following day. ("[Show Inactive Deals](https://help.theaffiliateplatform.com/affiliate-platform/managing-deals#deleting-deals-and-deal-history)")
* **Players Association**: Players linked to the original version remain associated with it.
* **New Players Registrations**: The new version only accepts newly registered players.

### Change for existing users in the current deal group from tomorrow

\
When modifying an existing ***RevShare deal*** or ***Hybrid deal*****&#x20;(with RevShare component**)**,** you have two options:<br>

1. Apply changes only to newly registered players going forward:
2. **Move existing players to the new version of the&#x20;**<mark style="color:orange;">**RevShare deal**</mark> ***from tomorrow*****&#x20;using the toggle** “*Change for existing users in the current deal group from tomorrow*”

{% hint style="danger" %}
When modifying a **Hybrid deal**, existing players can be moved with the toggle ***only*** to the new version of the RevShare component of the deal and **not** to the new version of the CPA component or new version of any additional settings of the deal
{% endhint %}

\
When enabled, the new RevShare percentage will apply to all existing players *from tomorrow*.\
Past activities won’t be dynamically recalculated. In case retroactive financial activity is reported, RevShare commission will be calculated based on the deal version that was valid for this player at the time.

{% hint style="success" %}
***Example:***\
On 01/01 user is registered on a 20% RevShare deal.\
On 02/01 user lost 100 EUR (RevShare commission is 20 EUR)\
On 05/01 user is moved with the Change for existing users in the current deal group from tomorrow toggle to a new version of the RevShare deal (50%)\
On 06/01 user lost 200 EUR → RevShare commission generated on 06/01 is 100 EUR. Total RevShare commission will be 20 EUR (20% RS) + 100 EUR (50% RS) = 120 EUR
{% endhint %}

{% hint style="warning" %}
Any changes to existing deals, ***including sub-affiliate deals***, take effect starting at 00:00:00 UTC on the day after the modification.
{% endhint %}

<br>


# Campaigns

This section covers campaign management

Campaigns are used to track and optimize affiliate marketing efforts. They help measure performance, attribute conversions, and manage commission structures based on traffic sources.

### &#x20;**How to create campaigns for the affiliate?**

1. Go to *'Affiliate profile'* and access *'Campaigns'* bar
2. Click *'Create'*&#x20;

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

2. Save the campaign\ <br>

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

### Manage deals for specific campaigns

Deals can be set based on different criterias (Countries, Brands, Campaigns, Product).<br>

**How Campaign-Based Deals Work**

* A campaign can be assigned to an affiliate deal, ensuring that commissions are calculated specifically for that campaign.
* Deals can be set to apply only when traffic comes from a particular **campaign.**
* Affiliates may have different payouts depending on the campaign they are promoting, allowing for flexible and targeted compensation.

{% hint style="success" %}
**Example:**\
A deal set for *Campaign Halloween* will reward the affiliate with 200 CPA for each player from Campaign Halloween that makes an FTD of 100 EUR
{% endhint %}

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

### Build tracking links for a specific campaign

By using campaign-specific tracking links, affiliates can ensure their promotions are accurately recorded, and performance can be analyzed at a campaign level.\
\
Go to *Destination links*  > *Build link* to generate a link for a specific campaign.<br>

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


# Destination Links

This section covers the creation and management of tracking links that direct traffic to specific landing pages.

Destination Links are the landing pages the operator uploads, that can be grabbed by the affiliate in order to bring traffic to your site.

The destination links are separated per brand and type, and can have different custom attributes like Language, Vertical, Currency for easier segmentation and analyzing results related to your pages.

To define new or edit existing attributes for segmenting and reporting of your Destination Links, refer to [“Custom Tags“](/affiliate-platform/custom-tags)

## How does the tracker works?

Destination links are used from affiliates to bring traffic to your site.

The operator creates a "Destination Link" in TAP backoffice, for the Affiliate to use. \
The affiliate will login to TAP and grab the link in its tracked version, so he can post it on his ads or website.\
Once a player clicks the link, TAP creates a tracker (unique for each click).\
User lands on your site and makes a registration.\
The platform has to keep the unique tracker and send it to TAP during the registration reporting process.

This tracker allows TAP to attribute the registration and any future user's actions to the affiliate who generated the initial click. This mapping ensures that affiliates are properly credited for the traffic they generate.

{% hint style="danger" %}
Make sure that the link structure used is in accordance with your platform provider convention.
{% endhint %}

## Create Destination Links

To create a new Destination Link simply follow these steps:

1. Go to “Destination Links” under Affiliate Desk tab&#x20;
2. Click “Create“&#x20;
3. Choose a name to describe your page (i.e Roulette Landing page with welcome offer)&#x20;
4. Choose the brand this Link will be related to&#x20;
5. Choose the “Link type“

* Registration page&#x20;
* Landing page&#x20;
* Homepage&#x20;
* Other

6\.   Put a Description of the landing page for you and for the Affiliates to see

7\.   Place the URL of the Destination (the final page the player will be navigated to). For example \*\*<https://yoursite.com**\\>
Add dynamic parameters, e.g. /?btag={{tracker}}

{% hint style="warning" %}
Make sure that the link structure used is in accordance with your platform provider convention.
{% endhint %}

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

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

### Private Landing Page

Your landing pages and destination links can be either **Public**, and accessed by **all affiliates**, or they can  be **Private**.

For example, landing page with a special logo of an affiliate website, or a specific bonus offer given exclusively to a specific source of traffic, can be made private and inaccessible to the rest of the affiliates in the platform.

To make your links private:

1. Disable the 'Public' toggle
2. Choose the affiliate(s) who should be able to see the link from the drop-down list. Multiple selection is supported.

<figure><img src="/files/8wkYkQZup9L4CtzGpClU" alt=""><figcaption></figcaption></figure>

### Dynamic Parameters in Your Link

When creating your links, dynamic parameters can be added to your destination URL in order to enrich the redirected URL with additional parameters so that the platform (i.e. casino platform) will be able to use those parameters as desired (for example in User Profile, such as affiliate ID)

These are examples of URL Parameters for your Destination Link:

* ***{{tracker}}*** – **Must be present**, later to be sent to TAP for visit matching. Each visit is tracked separately and uniquely, the tracker is generated automatically by TAP.&#x20;
* ***{{affiliate\_id}}*** – TAP affiliate id associated with the clicked URL. This way the platform provider can save the affiliate ID and place it in the User Profile.&#x20;
* ***{{affiliate\_name}}*** – TAP affiliate name associated with the clicked URL&#x20;
* ***{{link\_type}}*** – The type of the Destination link&#x20;
* ***{{link\_name}}*** – The name of the Destination link
* ***{time}}*** – Server time in milliseconds&#x20;
* ***{{campaign\_name}}*** – Affiliate Campaign Name associated with the clicked link
* **{{campaign\_id}}** - Affiliate Campaign ID associated with the clicked link
* **{{*****p*****}}** - Introducing support for a specific scenario in which the parameter value from a tracked link can be easily incorporated into the destination link.&#x20;

{% hint style="info" %}
Example of incorporating dynamic parameter {{p}} in the Destination URL:\
**Tracked link:** <https://go.aff.affprogram.vip/hi7843h>?<mark style="color:blue;">example\_parameter=bonus25</mark> **Destination link configuration by the operator:** <https://casino.com/><mark style="color:blue;">{{\_p\_example\_parameter}}</mark>/?tracker={{tracker}} \
**Resolution:** <https://casino.com/><mark style="color:blue;">bonus25</mark>/?tracker=lkjsddsjfhfgkahsjv
{% endhint %}

\
By placing the dynamic parameter "\_p\_" the affiliate himself can change the destination within the rules defined by the operator, a classic example is linking to specific sport matches, where URLs change rapidly based on the match ID. The affiliate would add "example\_parameter=5555111" which today would link to "Inter Milan vs Juventus" and tomorrow will change it to 11116666 which is a different match, yet the operator does not have to create new destination links for it.

* **{{referrer}}** - a referrer website in case it’s visible by the affiliate system

{% hint style="success" %}
Example of Destination URL: <mark style="background-color:red;"><https://yoursite.com/?btag=\\{{tracker\\}}\\&aff\\_name=\\{{affiliate\\_name\\}}></mark>
{% endhint %}

The URL parameter (key) would match the operator's platform terms, and the dynamic value will be taken from TAP. The link transformation is flexible and will match the platform provider convention.

### Custom Ending

Affiliates can define a custom ending of their tracking links.\
The custom ending will have the form of <https://go.aff.example.com/my_custom_slug>

Once defined for a landing page, it can't be changed.

In case of no activity, the custom link will be reserved for the affiliate's account for 180 days after creation or after the last visit by this link. If the custom link is expired and not in use anymore, it can be reused by other affiliate.

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

### Connecting Destination Links to Media

Destination links can be related to Media Assets like Banners or Emails. In order for the Media Asset to be pointed to the right path, a connection must be made between the two.&#x20;

When the affiliate chooses a banner or an email, that is associated with a link, clicking on that banner will lead the user to the destination link.

To link a Destination Link to a Media Asset simply choose from the drop down menu the desired asset.

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

Once the connection has been made, this Destination Link will be available to the Affiliate when grabbing the asset.

The Destination Link in question will be one of the options for choice where the Media Asset will point to.

To create new media assets, refer to “[Media Assets](/affiliate-platform/media-assets)“

### A/B testing of Destination Links

You can define an alternative destination link for A/B testing.

In this case, end-users will be sent to either the first link or to the second with a 50/50 percent distribution.\
That way, the performance of both landing pages can be analyzed by looking at the distribution of "A" and "B" variants in the "AFP9" dimension (Reporting/BI)\ <br>

<figure><img src="/files/4EiYzvvMlCA7iKQ00nBs" alt=""><figcaption></figcaption></figure>

### Redirect URL for blocked countries

**Redirect URL for blocked countries** is an essential tool for remaining compliant with regional laws and regulations while still providing users with a positive experience. \
This way operators and affiliates can protect their reputation and maximize the value of their traffic.\
\
By detecting traffic from restricted countries, visitors can be automatically redirected to a different landing page. \
This feature is particularly useful when your platform provider blocks traffic from certain countries (e.g. Iran) at the infrastructure level, preventing visitors from landing on unexpected technical error page.

#### How to set up a redirect URL for blocked countries:

1\. Navigate to the Landing Page where you want to configure the redirect URL.\
2\. Select the country or countries, traffic from which should be redirected.\
3\. Enter the Redirect URL in the designated field ("*Blocked countries destination URL").* Visitors from selected countries will be redirected to this URL.\
4\. Click "Save" to apply the changes.<br>

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

## Tracking links for Google Ads campaigns

Effective tracking of Google Ads campaigns is essential for measuring performance and optimizing marketing strategies. \
When running Google Ads campaigns, it is often necessary to bypass the standard affiliate tracking redirects and send users directly to the destination page.

#### How to create a tracking link specifically designed for Google Ads campaigns

Affiliates can modify the destination URL by replacing the ***traditional tracker*** with their ***affiliate ID***. This method ensures that users are directed straight to the desired page without a redirect through the affiliate system, while still accurately attributing the traffic to the affiliate (based on ***affiliate ID***)

{% hint style="success" %}
Example:

<mark style="background-color:red;"><https://yoursite.com/?btag=12345></mark>\
\
where\
\
12345=affiliateID
{% endhint %}

To further optimize the tracking, TAP can capture the **Google Click ID** - a unique identifier assigned to each click coming from a Google Ad, used for precise conversion tracking and campaign optimization. For that purpose, affiliates can include the Google Click ID parameter in the destination URL along with their affiliate ID.

{% hint style="success" %}
Example:\ <mark style="background-color:red;"><https://yoursite.com/?btag=12345\\_abcdefg></mark>\
\
where \
\
12345=affiliateID\
abcdefg=googleclickID<br>
{% endhint %}

{% hint style="warning" %}
There is no need to create Destination Link or/and build a tracking link in the TAP backoffice.\
Affiliates can use the URL of the casino/sportbook landing page and add the dynamic parameter/s to it.\
\
**Check the link structure of your setup** in order to verify under what value the tracker parameter is passed&#x20;
{% endhint %}

#### How to track **Google Click ID** in Reporting/BI

Google Click ID parameter that is passed in the tracking link can be analyzed by looking at the "AFP1" dimension in [Reporting/BI](/reporting/reporting-interfaces-bi)<br>

## Build a tracking link for an affiliate

\
To generate a tracking for the affiliate:

1. Go to "Destination Links"
2. Choose a landing page and click on *"Build Link"*

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

3. A modal will open where you can:

* Choose the affiliate for which you want to build a link -> Each affiliate has *unique tracking link*
* *Optional***: Customize the tracking link** by choosing the deal to which traffic from this link should be assigned, adding dynamic parameters to the link, defining custom link ending etc.

4. Click copy button and share link with your affiliate.

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

{% hint style="warning" %}
Affiliates won't have access to their tracking links unless they have a Deal defined.\
Go to [Managing Deals](/affiliate-platform/managing-deals) to find more about setting up affiliate deals.
{% endhint %}

Affiliates can navigate to 'Links' page in their account to take their tracking links.

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

## QR codes for tracking links

QR codes provide a quick and easy way to share tracking links. When users scan the QR code, they are directed to the associated tracking link, enabling seamless redirection while retaining all tracking parameters. QR codes are especially useful for offline promotions or printed materials, as it allows to track user engagement and conversions effectively, just as with standard tracking links.

To get QR codes for tracking links, the affiliate should:

1. Go to "*Links*"
2. Choose the destination link they want to generate a QR code for and click on the QR code icon

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

3. A modal will open displaying the QR code, which you can copy or download.<br>

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

## Link lookup

\
Link Lookup is a tool that allows you to search and manage all generated tracking links by providing a comprehensive view of all links and their associated data.\
You can easily navigate through the links and identify the associated affiliate and landing page.

#### **How to use Link lookup:**

1\. Navigate to *"Link lookup"* screen \
2\. Use the filters to:

* Verify the details of an individual tracking link by entering it in the Search bar
* Find all tracking links associated with a specific affiliate
* Sort links by creation date

<figure><img src="/files/1c4x9UJBBkOKn8fS0Jem" alt=""><figcaption></figcaption></figure>

## Mobile Tracking


# Promo codes

This section covers how to generate and track promo codes that allow affiliates to refer players without a direct link.

Promo codes are used by affiliates across various marketing channels to attract new players to the casino/sport betting site, offering them exclusive promotions such as bonuses, free spins or other rewards. \
All promo codes are created and controlled by the operator. Affiliates cannot create or edit promo codes. They can only distribute the promo codes assiggned to them.\
Providing unique and attractive promo codes helps affiliates build trust and engagement with their audience.

## How do Promo codes work:

Affiliates can use their unique promo codes to bring traffic to the casino/betting site. \
Once a player registers using an affiliate’s promo code, the casino/sport betting platform should *collect the promo codes* submitted by players and send the promocode to TAP when reporting the player's registration.

{% hint style="success" %}
Check with your Account Manager for more information on *how promocode must be reported to TAP* by your platform.\
Promocode is considered the **primary attribution factor** over the tracker.&#x20;
{% endhint %}

## How to create Promo codes for affiliates?

1. Go to “**Promo codes**”
2. Click “Create”
3. Type the *Promo code value* (unique per affiliate)
4. Choose the *Affiliate* with whom the Promo code will be associated&#x20;
5. Choose the *deal* to which players that used this Promo code will be attributed (optional). If deal is not selected, players using this Promo code will be attributed to Home deal of the affiliate
6. Select “*Status*”: Active in order to activate the Promo code
7. Choose the *Activity period* (optional). Promocode can have only Start date, only End date, both Start+End date or none activity dates.&#x20;

{% hint style="warning" %}
Promocodes become ***Inactive*** when *End date* is reached OR when stats is *changed manually* by operator.\
\
If promocode’s status is ***Inactive***, it is considered *invalid as an attribution factor*, even if reported to TheAffiliatePlatform upon registration fact.
{% endhint %}

8. Write *Notes to affiliate* to indicate important information about the Promo code.\
   Add *Internal Notes* (optional)
9. Click on "**Save"**

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

## How can affiliates take their Promo codes?

\
Affiliates will be able to see all their Promocodes in their account.\
They can copy their promocodes and use them for bringing new players to the casino/sport betting site.

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

## Promo code analysis

1\. '**utm\_medium (value: 'promocode\_engine')**  dimension will display results linked to traffic that came from promo codes.\
This helps identify the effectivenes of promo code in driving player engagement in comparisson to different channels.

2\. **'utm\_campaign'** dimension will display data tied to specific promo codes.\
This helps identify which promo codes were most effective in driving player engagement.

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


# Media Assets

This section explains how to upload and manage marketing materials for affiliates to use in their campaigns.

Media assets is the section where you can upload banners, emails and other creative resources for affiliates to grab and use them for promotion. There are the 4 different media assets supported:

1. Banner, Image&#x20;
2. Screenshot, Image
3. JavaScript
4. Email (HTML)&#x20;

To create a new media asset:

1. Go to 'Media Assets'
2. Click 'Create'
3. Choose the relevant asset type

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

### Create a Banner

1. Give your banner a **name**, which will appear in the list of media assets (i.e. the offer+size)
2. Choose the **Brand** related to the media.

{% hint style="warning" %}
Note that once the meaia asset is saved, the Brand can't be changed
{% endhint %}

3. Change the **Type** of media, if needed

{% hint style="warning" %}
Note that once the media asset is saved, the Type can't be changed
{% endhint %}

4. Write a description for the banner, that will be visible to affiliates. It could be a brief explanation of the offer presented in the banner, type of promotion etc.
5. Upload the banner from your device or from the web
6. Click 'Save'
7. After saving, choose from the list under “Related destination links” the possible destination link/s that the banner will point to. When grabbing a tracked version of this banner, affiliate can choose where this banner points to (i.e. home page, valentines day landing page etc)

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

You can also create “custom tags” that will help you define and filter your media assets easier, such as Currency, Language, Banner size, product etc.

To learn more refer to “[Custom tags](/affiliate-platform/custom-tags)” section.

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

### Create a Mailer

1. Give your mailer a **name**, which will appear in the list of media assets (i.e. the offer+size).
2. Choose the **Brand** related to the mailer.

{% hint style="warning" %}
Note that once the meaia asset is saved, the Brand can't be changed
{% endhint %}

3. Change the **Type** of media, if needed.

{% hint style="warning" %}
Note that once the media asset is saved, the Type can't be changed
{% endhint %}

4. Write a description for the mailer, that will be visible for affiliates. It could be a brief explanation of the offer presented in the mailer, type of promotion etc.
5. **Paste code** or **write code directly in the editor**.
6. Click 'Save'
7. After saving, choose from the list under “Related destination links” the possible destinations that links in the mailer will point to. When grabbing a tracked version of this email, affiliate can choose where this mailer points to (i.e. home page, valentines day landing page etc)

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

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

**Important!** \
\
Every URL in the HTML code (in tags) must have <mark style="color:blue;">**#Affiliate-link#**</mark> \
For example:  <mark style="color:red;">\<a href="#Affiliate-link#"></mark> , so an image in the header of the email that will lead to a destination link will look like this:&#x20;

{% code overflow="wrap" %}

```html
<a href="#Affiliate-link#"><img src="http://banners.netopartners.com/1/mail/images/bonus_100prc_nl/bonus_100prc_page_2_05.jpg"></a>
```

{% endcode %}

The <mark style="color:blue;">#Affiliate-link#</mark> tag will be replaced with the tracked destination link that the affiliate chose.

### Create a JavaScript Banner

A JavaScript banner can be used by the affiliate to place on his page/site. The banner content will be loaded from the JavaScript behind. What is behind that script is the responsibility of the operator. The operator can change any images or whatever is behind that banner on their side without notifying the affiliate or having them change the banner code and the image source.<br>

1. Give your JavaScript Banner a **name**, which will appear in the list of media assets (i.e. the offer+size).
2. Choose the **Brand** related to the JavaScript Banner.

{% hint style="warning" %}
Note that once the meaia asset is saved, the Brand can't be changed
{% endhint %}

3. Change the **Type** of media, if needed.

{% hint style="warning" %}
Note that once the media asset is saved, the Type can't be changed
{% endhint %}

4. Write a description for the JavaScript Banner, that will be visible for affiliates. It could be a brief explanation of the offer presented in the mailer, type of promotion etc.
5. **Paste code** or **write code directly in the editor**.
6. Click 'Save'
7. After saving, choose from the list under “Related destination links” the possible destination link/s that the Banner will point to. When grabbing a tracked version of this banner, affiliate can choose where it points to (i.e. home page, valentines day landing page etc)

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

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


# Pixel tool (Postbacks / Callbacks)

This section covers the technical setup for postbacks, allowing affiliates to receive data on conversions.

{% hint style="warning" %}
Pixel firing depends on how often data is transferred from the platform to TAP.
{% endhint %}

## Pixel types

TAP offers different types of Pixels (also called Postbacks or Callbacks):

* **S2S HTTPS** - Server to Server pixel call with GET method
* **Facebook/Instagram API** - Server-Side Conversion Tracking
* **TikTok API -** Server-Side Conversion Tracking
* **Google Ads -** Server-Side Conversion Tracking

\
**S2S HTTPS Pixel** is calling any specified URL with a set of dynamically appended parameters based on the affiliate request.\
**FB/Instagram API, TikTok API** and **Google Ads API** pixels are sending events to the social media platforms using Conversions API.

## Pixel triggering events/actions

Each of the pixels can be triggered on the following events/actions (considering the necessary data was reported to TAP). Affiliates can set more than one pixel definition (triggered on same or different events).

* **Lead -** will be triggered when a new registration is reported to the affiliate platform;
* **Qualified Lead** - will be triggered when a new registration has passed the deal qualifications ***(only for CPL deals)***;
* **FTD** - will be triggered when a new FTD (First-Time Deposit) is reported to the affiliate platform;
* **QFTD** - will be triggered when a new FTD passes all qualifications ***(only for CPA deals)***

## How to create pixel defintion

1. Go to ***'Pixel Definitions***' tab in the affiliate profile and click '***Create***'
2. Write a ***Name*** for the pixel&#x20;
3. Choose the ***Deal*** you want to relate the pixel to. \
   You can choose ***Global*** for any deal, or a specific deal among the different deals configured for the affiliate. Pixels will be fired only for players that are assigned to a deal (any deal or a specific deal, according to the pixel definition).

{% hint style="warning" %}
Pixels are not triggered for conversions from deal type '**None**'&#x20;
{% endhint %}

1. Choose the ***Action on which to trigger*** the pixel
2. Choose the ***Type of Pixel*** and fill in the necessary information.

## Server-to-server pixels (S2S)

Server-to-server pixels are defined as URLs that link to the server location with a set of dynamically appended parameters based on the affiliate request.

{% hint style="success" %}
A typical server-side pixel might look similar to the following:

> **<https://pixelserver.com>?**<mark style="color:blue;">**click\_id=**</mark>**{{afp}}&**<mark style="color:blue;">**lead\_id=**</mark>**{{registration\_id}}**

Where:

* *{{registration\_id}}* - is part of TAP's internal parameters supported out of the box.&#x20;
* *{{afp}}* - is an example of a dynamic custom parameter used by the affiliate to fit dynamic data like click\_id in a PPC campaign etc.
  {% endhint %}

### Additional Parameters&#x20;

{% hint style="warning" %}
Available for **S2S HTTPS** pixels
{% endhint %}

Pixel URLs can include ***Default*** supported parametrs or ***Custom*** parameters. \
TAP will collect any **additional parameters** the affiliate is sending, so later they can passed back in the pixel.

For ***Default*** parameters supported by TAP, explanations can be found in ***'List of Default parameters'*** below or when hovering over the parameter in the Pixel Definition modal.\
Parameters without any explanations will be those collected by TAP from all clicks ever made on the affiliate's tracing links. From the example below, custom parameter is for ***{{click\_id}}.***

<details>

<summary>List of Default parameters</summary>

**{{deal\_id}}** - ID of the deal that is matched to the customer brand, country, source id, campaign id \
**{{deal\_group\_id}}** - ID of the deal group that was set in the original link used by customer **{{deal\_group\_name}}** - Name of the deal group \
**{{campaign\_id}}** - Campaign ID if it was specified in the original link used by customer \
**{{campaign\_name}}** - Campaign name that corresponds to campaign\_id \
**{{brand\_id}}** - ID of the brand \
**{{brand\_name}}** - Name of the brand \
**{{link\_id}}** - ID of the destination link to which customer was redirected \
**{{link\_name}}** - Link name that corresponds to link\_id \
**{{asset\_id}}** - ID of the media asset if it was specified in the original link used by customer \
**{{asset\_name}}** - Media asset name that corresponds to asset\_id \
**{{asset\_type}}** - Media asset type that corresponds to asset\_id (e.g. email, banner etc.) \
**{{country\_code}}** - 2 symbol country code of the customer used in registration \
**{{source\_id}}** - Optional source\_id if it was specified in the original link used by customer \
**{{registration\_id}}** - Unique ID of registration in Affiliation system \
**{{customer\_id}}** - ID of the customer as it's known in the destination platform \
**{{payout}}** - Payout amount for CPA or CPL deals \
**{{payout\_currency}}** - 3 symbols currency code of the payout amount \
**{{utm\_source}}** - Additional parameter passed by affiliate \
**{{utm\_medium}}** - Additional parameter passed by affiliate \
**{{utm\_campaign}}** - Additional parameter passed by affiliate \
**{{afp}}** - Additional parameter passed by affiliate \
**{{afp1}}** - Additional parameter passed by affiliate \
**{{afp2}}** - Additional parameter passed by affiliate \
**{{afp3}}** - Additional parameter passed by affiliate \
**{{afp4}}** - Additional parameter passed by affiliate \
**{{afp5}}** - Additional parameter passed by affiliate \
**{{afp6}}** - Additional parameter passed by affiliate \
**{{afp7}}** - Additional parameter passed by affiliate \
**{{afp8}}** - Additional parameter passed by affiliate\
**{{afp9}}** - Additional parameter passed by affiliate \
**{{deposit}}** - Total deposits known to affiliate system at the moment of sending pixel \
**{{registration\_date}}** - User registration date in unix epoch format \
**{{first\_deposit\_amount}}** - User first deposit amount\
**{{first\_deposit\_date}}** - User first deposit date in unix epoch format

</details>

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

***If you are an affiliate*****,** go to "Pixels" and click "Create". A creation model will open for you to fill the necessary information.

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

## Facebook/Instagram API

\
This feature allows the affiliate platform to send conversion events directly to Facebook or Instagram (via the Conversions API). By sharing this data, you help Facebook Ads or/and Instagram Ads systems optimize campaigns more accurately, resulting in better performance and reporting.

{% hint style="success" %}
As Instagram is a part of the Meta ecosystem, the setup for Facebook Ads Pixel will also apply to Instagram Ads. The same Pixel ID and configuration used for Facebook will track conversions and events on Instagram as well. \
\
Affiliate doesn't need a separate integration just for Instagram, as long as:

* Affiliate's Instagram campaigns are running under the same Meta Business account (and linked to the same Pixel/Data Source)
* Any server-side events sent via the Facebook Conversions API will automatically work for both Facebook and Instagram traffic.
  {% endhint %}

\
**How to set Facebook/Instagram API pixel**

1. Follow the steps for creating a pixel and choose pixel type **FB/Instagram API**&#x20;
2. Set the following details:

* **Facebook Pixel** **ID**: Your unique Pixel (Data Source) ID in Facebook (e.g., `1234567890`).
* **Facebook Access Token:** A valid token granting permission to send conversion events on your behalf. Access token is obtainable via your Facebook Business Manager or Events Manager setting

<figure><img src="/files/1jSpRQXLcwQNsB4kszQZ" alt=""><figcaption></figcaption></figure>

***If you are an affiliate*****,** go to "Pixels" and click "Create". A creation model will open for you to fill the necessary information.

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

\
**What is FBCLID?**

The **FBCLID** (Facebook Click Identifier) is a unique ID, appended to URLs when an user clicks on a Facebook/Instagram ad. It is used to identify the specific ad click. Adding FBCLID is usually not a manual process, but is handled by Meta. \
The affiliate is responsible for passing **FBCLID** upon user's visit (via their tracking link).\
TAP will store the **FBCLID** and will return it in the postback.

{% hint style="success" %}
***How to pass FBCLID to TAP on user visit:***\
1\. Affiliate builds a tracking link from TAP: \_<https://go.aff.theaffiliateplatform.com/1dshoj2_\\>
*2.* Meta appends FBCLID via auto-tagging upon user visit<br>

***Example***:\
*<https://go.aff.theaffiliateplatform.com/1dshoj2k>?**fbclid=IwAR0EXAMPLE123abc456XYZ789***
{% endhint %}

## TikTok API

\
**How to set TikTok API pixel**

1. Follow the steps for creating a pixel and choose pixel type **TikTok API**
2. Set the following details:

* **Pixel code :** Your unique Pixel code/ID in TikTok (e.g. `1234567890`).
* **Access token:** A valid token granting permission to send conversion events on your behalf. Access token can be generated in TikTok Business Center (Events Manager or Developer Tools)

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

***If you are an affiliate*****,** go to "Pixels" and click "Create". A creation model will open for you to fill the necessary information.<br>

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

**What is TTCLID?**

The TTCLID (TikTok Click Identifier) is a unique ID, appended to URLs when an user clicks on a TikTok ad. It is used to identify the specific ad click. Adding TTCLID is usually not a manual process, but is handled by TikTok. \
The affiliate is responsible for passing TTCLID upon user's visit (via their tracking link).\
TAP will store the TTCLID and will return it in the postback.<br>

{% hint style="success" %}
***How to pass TTCLID to TAP on user visit:***\
1\. Affiliate builds a tracking link from TAP: \_<https://go.aff.theaffiliateplatform.com/1dshoj2_\\>
*2.* TikTok appends TTCLID  via auto-tagging upon user visit<br>

***Example***:\
*<https://go.aff.theaffiliateplatform.com/1dshoj2k>?**ttclid=1a2b3c4d5e6f7g8h9i***
{% endhint %}

## Google Ads

**How to set Google Ads API pixel**

1. Follow the steps for creating a pixel and choose pixel type **Google Ads**
2. Set the following details:

* **Conversion ID:** Your unique unique identifier assigned to your Google Ads account (e.g. `AW-123456789`).
* **Conversion Label:** Unique identifier for a specific conversion action within your Google Ads account.

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

***If you are an affiliate*****,** go to "Pixels" and click "Create". A creation model will open for you to fill the necessary information.

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

#### What is **GCLID**?

The **GCLID** (Google Click Identifier) is a unique ID, appended to URLs when an user clicks on a Google ad. It is used to identify the specific ad click. Adding GCLID is usually not a manual process, but is handled by Google Ads. \
The affiliate is responsible for passing GCLID upon user's visit (via their tracking link).\
TAP will store the GCLID and will return it in the postback.

{% hint style="success" %}
***How to pass GCLID to TAP on user visit:***\
1\. Affiliate builds a tracking link from TAP: \_<https://go.aff.theaffiliateplatform.com/1dshoj2_\\>
*2.* Google Ads appends GCLID via auto-tagging upon user visit<br>

***Example***:\
*<https://go.aff.theaffiliateplatform.com/1dshoj2k>?**gclid=EAIaIQobChMI2MqR0P2h\_gIVkZBoCR0HgEgIO***
{% endhint %}


# Payments

This section explains the workflow for processing affiliate payouts.

Payments to affiliates can be managed in TAP in two modes: <br>

* **Direct payment** - Payments are processed by users with Admin (full) permission
* **3-steps payment** (Request-Approve-Pay) - Payment processing involves three stages of approval.<br>

To set/change the mode:&#x20;

1. Make sure that there are no payments in Pending Approval or Pending Payment stage
2. Go to **Settings**
3. Select the desired mode
4. Click **Save**

<figure><img src="/files/2teEaYhJE9Y3jMilJdrL" alt=""><figcaption></figcaption></figure>

## Balance Report&#x20;

1. Go to "Balance"
2. Filter the balance report:

* Use "*Till (end of day)*" filter in order to see the due balance until a specific date
* Use "*Only above treshold*" filter in case you want to filter only affiliates whose open balance is above set threshold
* Use "*Balance, from*" and "*Balance, to*" in case you want to filter only affiliates with an open balance between the chosen monetary values (*example*: Show affiliates that have due balance between 500 and 1000 EUR)
* Use "*Columns*" menu in case you want to show/hide columns in the list

{% hint style="info" %}
To export the balance report, click on "**Export**" button
{% endhint %}

<figure><img src="/files/HhuL0DsB86ZZgPSSFVk3" alt=""><figcaption><p>Balance report</p></figcaption></figure>

## Direct Payment Flow

In Direct Pyament flow an user from your operation with Admin (full) access has permission to make\
Payment Requests for affiliates. Payments are immediately marked as completed and the change is reflecting in the affiliate's balance.&#x20;

{% hint style="warning" %}
Exercise caution when making payment requests in Direct Payment flow, as there are no further approval steps before completing the payment.&#x20;

In Direct Payment Flow, payments in bulk can't be made.
{% endhint %}

#### Make a Payment request

In the Balance Report:

1. Apply the relevant filters\
   \
   Example:  Make a payment request only for the balance that was relevant until X date by using the 'Till (end of day)' filter. If you are making payment on the 5th of the month but you want to pay only balance relevant until end of previous month, set the filter to last day of previous month.
2. Click on "*Make Reques*t" button for the payment you wish to make<br>

   <figure><img src="/files/dLSfMxBnqW6hFoVA4hGs" alt=""><figcaption><p>Make payment request (Direct Payment)<br><br></p></figcaption></figure>
3. A modal will open showing all the information related to the payment you are about to make.

<figure><img src="/files/mZoql2bleI0K3PH8hza5" alt=""><figcaption><p>Payment request modal</p></figcaption></figure>

* "*Payment amount*" refers to the due balance of the affiliate. \
  You can make a payment request for a payment amount different than than the due balance.

{% hint style="warning" %}
Specified amount can not be less than the amount available for payment.
{% endhint %}

* "*Period":* Refers to the specific time frame (payment period) for which an affiliate’s commission is calculated and paid out.
* Add "*Operator comments*" (optional; for internal use, not visible to the affiliate)
* Toggle "*Send mail to affiliates"* if you want an email to be sent to the affiliate informing them about the processed payment. The mail contect can be reviewed and adjusted in *Marketing tab (bar) -> Assets*
* Click *"Request"* **to pay.**

{% hint style="info" %}
Payment period is used only for referrence and doesn't affect the actual payment date in Reporting and statistics\
\
***Example:*** \
On 15/10 you make a payment to an affiliate (you pay the commission for payment period 2024-09-01  -  2024-09-30) \
In Media Report, the payment will be reflected on 02/10 (payment date) and not on 30/09 (*end date of the payment period*)
{% endhint %}

## Request-Approve-Pay

In Request-Approve-Pay flow payments are completed after going through a 3-step approval process that includes:

1. Make a **payment request**
2. **Approve** the **payment request**
3. **Confirm** the **payment**  - Only user from your operation with Admin (full) access has permission to approve payments.

After the final approval step is completed and payment is approved, the payment will be reflected in the affiliate's balance.&#x20;

### Make a payment request<br>

This is the **first** step in the 3-steps payment flow.

1. Click on "*Make Reques*t" button for the payment you want to request<br>

   <figure><img src="/files/8pQGrCN48pX7SSWuuW6A" alt=""><figcaption><p>Make payment request (Request-Approve-Pay)</p></figcaption></figure>

2. A modal will open showing all the information related to this payment request<br>

<figure><img src="/files/EGMxDbJjzRqf62RD0Tug" alt=""><figcaption><p>Payment request modal</p></figcaption></figure>

* "*Payment amount*" refers to the due balance of the affiliate.

  You can make a payment request for a payment amount different than than the due balance.\
  Payment amount can't be higher than the affiliate's due balance.

{% hint style="warning" %}
Specified amount can not be less than the amount available for payment.\
Once set upon making a *Payment request,* **amount can't be changed in the next approval stages for the same request.**
{% endhint %}

* *"Period"* refers to the specific time frame (payment period) for which an affiliate’s commission is calculated and will be paid out.
* Add "*Operator comments*" (optional; for internal use, not visible to the affiliate)

3. Click "*Request*"&#x20;

{% hint style="info" %}
Requested paymets will be moved to ["Pending Approval"](#approve-a-payment-request) stage.
{% endhint %}

#### Payment requests made by affiliates &#x20;

You can allow your affiliates to submit payment requests directly from their accounts. \
**Request Payment** option for affiliates is possible only in **Request-Approve-Pay** flow.\
Affiliates can not make payment requests in **Direct Payment** flow.&#x20;

To enable **Request Payment** option for affiliates :

1. Go to **Settings**
2. Set '*Payment can be requested by affiliate'* to Yes
3. Click **Save**

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

#### &#x20;How affiliates can make payment requests from their accounts

Affiliates will be able to make a payment request by clicking on "Request Payment" button in their Dashboard.\
A modal will open asking them to either approve or dismiss the action.\
Once payment request is submitted by the affiliate, no additional payment requests can be made until the initial request is either approved or cancelled. \
Affiliates can only request payment for their available balance and can not specify a custom amount.\
Payments can be requested by affiliates only if their available balance is positive and above payment threshold (if any).<br>

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

{% hint style="info" %}
Requested paymets will be logged in ["Pending Approval"](#approve-a-payment-request) stage.
{% endhint %}

### Approve a payment request

This is the **second** step in the 3-steps payment flow where you can Approve/Cancel payment requests.\
\
The payment request will appear in "***Pending Approval***" side menu.\
You can search payment requests by unique Payment @ID or add filters to limit the results by:

* *Affiliate*&#x20;
* *Manager ->* filter payment requests for affiliates that are assigned to a specific manager
* *Amount from-to* -> filter payment requests for amount within the selected range.
* *Payment method ->* filter payment requests for a speciic payment method<br>

1. To ***approve a payment request***, click on "*Approve*" button on the payment request you want to approve.\
   A window will open, asking you to either confirm or dismiss the action.
2. To ***cancel a payment request***, click on "*Cancel*" button on the payment request you want to approve.\
   A window will open, asking you to either confirm or dismiss the action.\ <br>

   <figure><img src="/files/Ym8a3ZdIJ1KufBgRscPT" alt=""><figcaption><p>Approve/Cancel payment request</p></figcaption></figure>

{% hint style="info" %}
Approved payments requests will be moved to ["Pending Payment"](#confirm-payment) stage
{% endhint %}

### Confirm payment

All approved payment requests will appear in "***Pending Payment**"* side menu.\
You can use the search/filtering options to limit the results shown.

1. To ***confirm a pending payment:***

* Click on "*Confirm*" button on the pending payment you wish to confirm.
* A modal will open, asking you to either confirm or dismiss the action. \
  Toggle "*Send mail to affiliates"* if you want an email to be sent to the affiliate informing them about the processed payment. \
  The mail contect can be reviewed and adjusted in *Marketing tab (bar) -> Assets*
* Click on *"Confirm"*

<figure><img src="/files/p5PdPsNR2vcV4PnhtJ1p" alt=""><figcaption><p>Cnofirm pending payment</p></figcaption></figure>

2. To ***cancel a pending payment:***

* Click on "*Cancel*" button on the payment request you wish to cancel.
* A window will open, asking you to either confirm or dismiss the action.
* Payment request can be made again from *Balance report.*&#x20;

<figure><img src="/files/C4SHJyvsqKRcWbgm0vLI" alt=""><figcaption><p>Cancel pending payment</p></figcaption></figure>

{% hint style="info" %}
Confirmed payments will be moved to ["Completed payments"](#completed-payments)
{% endhint %}

## Completed payments

Go to "*Completed payments*" side menu to get a report of all approved payments.

You can search payments by unique Payment @ID or add filters to limit the results.\
Expand the payment row in order to get more detailed information on the payment.

{% hint style="info" %}
To export Completed Payments report, click on "**Export**" button
{% endhint %}

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

### Mass request, approve or cancel affiliate payments

TAP gives you the option to make payments requests, as well as approve/cancel already opened payment requests, in bulk with a multi-select option.

{% hint style="warning" %}
This option is available only in Request-Approve-Pay flow.
{% endhint %}

#### How to mass request payments

1. Go to *"Balance"*
2. Select the payments you wish to request using multi-select (you can select multiple or all options)
3. Click *"Make Request"* button
4. A modal will open asking you to either approve or dismiss the action.
5. Click on "*Request*"<br>

<figure><img src="/files/5ZwJcP3AZOAkkwiGHueC" alt=""><figcaption></figcaption></figure>

#### How to mass approve/cancel payment requests

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

#### How to mass confirm/cancel payments

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

## Payment details and Payment threshold

\
For more information on affiliates' payment details, you can refer to [Payment Details](/affiliate-platform/affiliate-account#payment-details)\
\
For more information on how to set a payment treshold, you can refer to [Payment threshold](/affiliate-platform/affiliate-account#payment-threshold)


# Upload Invoice and Supporting Documentation

This section covers the process of uploading financial documentation and the verificaiton process done by Operator

\
Affiliates can attach invoices and supporting documentation to their payment requests. These documents can be verified by the operator during the payment approval process.

### Enable the option for affiliates to request a payment

To allow affiliates to request payments:

1. Go to **Settings** in the admin backoffice.
2. Enable **Payment can be requested by affiliate.**
3. Ensure that **Payment flow mode** is set to **Request-Approve-Pay** (this means all affiliate payment requests will require operator's approval).
4. Check the **Available payment methods** that affiliates can select from. If needed, update this list to include only the payment methods supported by your operation.
5. Click **Save.**

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

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

### How affiliate can make a payment request

Once the option to request payments is enabled, affiliates can request a payment for their open balance, whenever

* Affiliate's open balance is above the threshold (if set).
* There is no other payment request in process.<br>

To make a payment request, the affiliate should:

1. Log in to their account and go to **Dashboard.**
2. Click **Request payment.**
3. A confirmation modal will appear. If wish to proceed, click **OK.**

* If the affiliate does not have payment method details defined, the request cannot be submitted. Affiliate will be redirected to the **Payment details** section. Once the payment method details are provided, they can return to the **Dashboard** and submit the payment request.

The new payment request will be logged and will appear in the operational back office for the operator to review, approve, or cancel.<br>

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

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

### Uploading Invoices and Additional Documentation

Once a payment request is submitted, affiliates can upload one **invoice** and one **additional document,** supporting their request.

To upload documents, the affiliate should:

1. Go to **Payments**.
2. Navigate to the payment request in **Processing** status.
3. Click **Upload Documents**.

<figure><img src="/files/6WysiUmDgByOtsJI3hVZ" alt=""><figcaption></figcaption></figure>

4. A modal for documents upload will open with explanation on the requirements.\
   The supported formats are PDF or image, of maximum size 5 MB.\
   To upload documents, click '*Upload*'
5. Once ready, click OK to save the uploads.

<figure><img src="/files/58bepLo67SzvAdv3ABCn" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Once the uploaded documents are saved, they can not be deleted. \
New documents can't be uploaded for the same payment request.&#x20;
{% endhint %}

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

6. To download and review the uploaded documents, click on the 'Download' icon.\ <br>

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

### Verify invoices (for Operator)

To review and verify invoices,

1. Go to *'Pending Approval*' screen
2. Click on 'View Invoice'. The uploaded document/s will be opened in a new tab and downloaded to your device. To complete this action, make sure that pop-ups are allowed in your browser.

<figure><img src="/files/58Eq9OszY71exmyJOo2R" alt=""><figcaption></figcaption></figure>

3. After verifying the documents, you can Cancel or Approve the payment request:<br>

* If you **Cancel** the payment request, **affiliate will be able to submit a new payment request and upload new documents.**
* If you **Approve** the payment request in the final approval step (*'Pending pyament'*), payment will be marked as completed.<br>

4. To view the uploaded invoices and documents for approved payments, go to the '*Completed Payments'* list.\ <br>

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


# Adjustments

This section covers the process of making adjustments to affiliate's balance


# Custom Tags

This section explains how to use tags to categorize affiliates, media, links

Custom tags are labels that allow you to **efficiently define** and **filter** your affiliates, links, or media assets by tagging them based on criterias that are most relevant to your operation.\
\
For instance, you might want to group *affiliates* by traffic source, or classify *media assets* by banner size, or tag *links* based on language.<br>

### How to create custom tags:

1. Navigate to  “Custom tags” screen and click on “**Create**”
2. Choose **entity type**&#x20;

* Affiliate
* Media or&#x20;
* Links

3. Type the “**Tag name**” - custom and defined entirely by you\
   E.g. “Traffic Source”, "Language", "Size"
4. Use the toggle "**Required**" in case you want to make the tag selection mandatory upon creating/saving changes in affiliate account, media or link (optional)
5. Type BI **dimension** ID (follow the order of numbers of allowed dimensions specified in the brackets). Based on that order, the tags will be available in the Media Report
6. **Save**

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

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

#### &#x20;**Create related tagging Options**&#x20;

After saving the custom tag:

1. &#x20;Navigate to Options tab and click “**Create**”
2. &#x20;Type the option
3. &#x20;Save

{% hint style="info" %}
Example:\
You have created Custom tag *Traffic Source*, and you want to have the following tagging options: PPC, SEO, Facebook etc.\
Each one should be created as a separate Option
{% endhint %}

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

### Usage of Custom Tags

#### Affiliate

In the affiliate user profile, go to Affiliate Tags and choose from the options available.

<figure><img src="/files/dtPs9K3sqKLlAMdf7aTJ" alt="" width="439"><figcaption></figcaption></figure>

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

#### Destination Links/Media Assets

You can tag your media assets or destination links in the edit screen, as shown in the example below

<figure><img src="/files/02PfVlgbomlAk6jXVzbQ" alt=""><figcaption></figcaption></figure>

### Media Report and Segmentation

\
Custom tags can be used to efficiently **filter, segment and analyze** data related to affiliates, media assets and links\
\
See example usage below.

* In **Media Report** you can use Custom Tag dimensions for filtering/grouping\
  Example: You want to filter only results related to affiliates tagged with Product: Facebook<br>

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

* **Marketing**: You can use custom tags to **segment** your audience for an event driven journey/scheduled campaign&#x20;

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


# Player Referral Program

This section covers the setup of player referral program powered by integration between TAP and Smartico.io

{% hint style="info" %}
Player Referral Program is a paid service that should be requested separately.\
\
Contact the CSM team for full guidance on how to activate and use this feature.
{% endhint %}

## Overview

The **Refer-a-Friend** (RAF) feature allows you to run a Player Referral Program where players invite their friends to join your site. When the referred player meets certain requirements (e.g. makes a registration / deposit / wager a pre-defined amount, etc.), the referrer or/and the referred player can receive a reward.

1. Upon player registration, a personalised tracking URL (referral link) will be generated for said player and made available in Smartico CRM.\
   User state property `REF: Your personal refer friend URL that can be used to share with friends`&#x20;
2. The player sends the referral URL to a friend (social, messenger, e-mail, etc.)
3. Friend registers on your site via the referral link
4. Upon referral conversion (based on pre-set conversion rules), TAP notifies Smartico CRM, where automation rule/campaign is executed and the configured reward is credited (cash, free spins, loyalty points) to the referring player (referrer) and/or the referred player (referral).

## Configuration of conversion rules for referrals (TAP)

A dedicated RAF affiliate will be created in TAP. All referrals brought by players will be assigned to this affiliate and will be converted as per qualification rules pre-defined by y.\
\
To set qualification rules in TAP, you have to create a CPL or a CPA deal for the dedicated RAF affiliate.\
\
Possible qualification rules for referrals are (separately or combined):

* Referral makes a registration on your site (CPL deal with no additional qualifiers)
* Minimum FTD/Deposit made by referral (CPA deal with FTD or/and Total Deposit Qualifier)
* Minimum wagering amount generated by referral (CPL or CPA deal with Volume Qualifier)

\
You can set commission to 0 in the deal of the RAF affiliate, as this is a system affiliate and it is usually not needed for the system to calculate commission for them.

{% hint style="success" %}
***Example:***\
Player John123 refers player David000.\
David000 must make 100 EUR FTD and wager at least 50 EUR on your site to become a converted referral and trigger the Refer-a-Friend flow on Smartico for John123\
\
The deal of the RAF affiliate in TAP will be as follows:
{% endhint %}

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

## Get **referral** link&#x20;

{% hint style="info" %}
Contact your TAP CSM to request access to the TAP API documentation
{% endhint %}

Upon player registration, a personalised tracking URL (referral link) will be created by TAP.\
The referral link can be retrieved by operator via TAP API or from Smartico CRM (link will be available in property `REF: Your personal refer friend URL that can be used to share with friends`)

Operator can expose the referral URL in the player profile, gamification widget, sent it via communication channel from Smartico, etc.&#x20;

## Refer-a-Friend flow (Smartico)

{% hint style="info" %}
Contact your Smartico CSM for more details
{% endhint %}

Upon referral conversion, TAP sends an event to Smartico CRM, where automation rule/campaign is executed and any configured reward is credited (cash, free spins, loyalty points) to the referring player (referrer) and/or the new player (referral).&#x20;

### **Refer-a-Friend user state properties**

<table data-full-width="false"><thead><tr><th>Name</th><th>Technical name</th><th>Description</th></tr></thead><tbody><tr><td>REF: Your personal refer friend URL that can be used to share with friends.</td><td>aff_refer_friend_url</td><td>User's personal refarral link</td></tr><tr><td>REF: Ext user id of the player who has refer the current player</td><td>aff_referred_by_friend_ext_user_id</td><td>External user ID of the referrer (player who reffered the user)</td></tr><tr><td>REF: Count of converted friends ever referred by this user</td><td>aff_refered_friends_count</td><td>Count of converted referrals</td></tr></tbody></table>

### Refer-a-Friend events

For explanation purposes, let’s use:\
Friend A - who is referring users\
Friend B - was referred by friend A\
Friend C - was reffered by friend B

| Name                                                                                                            | Technical name                   | Description                                                                                                                          |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| REF: Indicator event from TAP that invited player is converted                                                  | aff\_referred\_player\_converted | Friend A gets this event, whenever Friend B is converted in TAP according to rules set up in the deal there                          |
| REF: Indicator event from TAP about the fact that THIS user was converted, bringing details about referral user | aff\_player\_converted           | Friend B gets this event when he is converted in TAP according to rules set up in the deal there                                     |
| REF: CRM event: Referred user triggered “Refer-a-friend Award” bonus.                                           | raf\_refer\_friend\_bonus\_given | Friend A gets this event, when player B does some specific tasks (e.g. bet 50 USD) and issue the bonus type ‘'Refer-a-friend Award’' |
| REF: Indicator event from TAP about the fact that THIS user has someone converted down the referral chain       | aff\_distant\_player\_converted  | Friend A gets this event, whenever Friend C is converted in TAP according to rules set up in the deal there.                         |


# REPORTING

These sections cover the reporting dashboards available in TAP, detailing into how metrics are structured and displayed in each view


# KPIs per period (tables)

The KPIs per period (tables) report provides daily and monthly overview of your KPIs, as well as acquision funnels.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

<img src="https://help.smartico.ai/welcome/~gitbook/image?url=https%3A%2F%2F77049817-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FfS5hl0PiysHtKAKMsQTe%252Fuploads%252FNdzSChAwyvhrOBK93eLy%252Fimage.png%3Falt%3Dmedia%26token%3D82dfbebb-67bb-455f-82a2-c187f8162c5a&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=efb11f39&#x26;sv=2" alt="" height="46" width="125">

## Month-to-Date (MTD)

{% hint style="info" %}
Use the MTD table to identify month-to-month tendencies in main KPIs
{% endhint %}

The MTD table consists of set of KPIs, which are being compared month-over-month for the period of between the beginning of the month till yersterday's day. <br>

**How to read it:**\
For example, on 15th of February, the comparison will be made between the period of 01/02-15/02 and the period of 01/01-15/01.\
In the example below:

* There are 107,855 new registrations for the period of 01/02-15/02, which is 15% more than the period 01/01-15/01

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

## Daily Data

{% hint style="info" %}
Use the daily view to identify spikes, dips, or anomalies in affiliates' performance.
{% endhint %}

The Daily Data table consists of breakdown of affiliate performance day by day for the filtered time period.

**Key Metrics:**

* FTDs - Count of first-time depositors
* QFTDs - Count of qualified first-time depositors (who qualified for CPA commission)
* Deposit Count  - Count of deposits&#x20;
* Deposits Amount (non-FTD) - Amount of deposits that are not first-time deposits
* Deposits Amount (FTD) - Amount of first-time deposits
* Withdrawal Count - Count of withdrawals
* Withdrawal Amount - Amount of withdrawals
* Active Players - Count of players that had either a Bet or a Deposit during the relevant period.
* Volume (Bet Amount)
* PnL (GGR) - GGR, as reported to TAP as final value
* Bonus Amount&#x20;
* Net PnL (NGR) - NGR, as calculated by TAP based on PnL(GGR) - Bonus - Deductions
* Chargebacks - If reported by platform
* Deductions - If reported by platform
* CPA Fees - Total CPA commission calculated for affiliates
* CPL Fees - Total CPL commission calculated for affiliates
* Rev Share Fees - Total RevShare commission calculated for affiliates
* Sub Affiliate Fees - Total commission from Sub-Affiliates calculated for Parent affiliates
* Total Commission - Sum of CPA Fees + CPL Fees + Rev Share Fees + Sub Affiliate Fees <br>

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

**Hints:**

* Use the 'Event date' filter to sepcify a time frame for which results will be shown.
* Use 'Date Zoom' filter to control the granularity of the report (how results are grouped by time), as shown below.

## Monthly Data

{% hint style="info" %}
Use the monthly view for high-level performance reviews.
{% endhint %}

The Monthly Data table consists of breakdown of affiliate performance month per month for the filtered time period.

**Key Metrics:**\
Same as Daily Data table

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

## Activity of Players by Registration Date (Cohort Report)

\
Build your custom cohort report by grouping players based on a shared characteristic, most commonly their **registration date**, to analyze their activity over a later time period.

To do this, use the **Event Date** and **Registration Date** filters together.<br>

* **Event Date** - Filters results based on when the activity occurred&#x20;
* **Registration Date** - Filters results based on when the player registered.&#x20;

**Example Insight:**&#x20;

* If you set **Event Date** between 01-03-2026 and 31-03-2026 and **Registration Date** between 01-02-2026 and 28-02-2026, the report will show **activities that happened in March for players who registered in February**.<br>

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

## Daily Acquisition Funnel

{% hint style="info" %}
Use the Daily Acquisition Funnel to identify periods with low/high conversions and spot trends amongst players.
{% endhint %}

This table provides daily breakdown of player conversions.

**Key Metrics:**<br>

* Visits (Unique) - Count of unique visits, generated via affiliates' tracking links&#x20;
* Registrations - Number of visitors who registered.
* FTDs - Number of registered players who made their first deposit.
* Conversion Rates:
  * Visits to Registrations - Percentage (%) of unique visitors who registered (Count of Registrations divided by Count of Count of unique visits, in %)
  * Registrations to FTDs - Percentage (%) of registered players who made an FTD (Count of FTDs divided by Count of Registrations, in %)

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

## Monthly Acquisition Funnel

{% hint style="info" %}
Use the Monthly Acquisition Funnel to identify months with low/high conversions and spot trends
{% endhint %}

This table provides monthly breakdown of player conversions.\
\
**Key Metrics:**\
Same as Daily Acquisition Funnel

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

## Important Clarifications

* **Active Players** – Represents count of players that had either a Bet or a Deposit during the relevant period.
* **NaN / Ø** – Indicates no data is available for the period or metric filtered.
* Use the **Date Zoom** to adjust the view to Daily, Weekly, Quarterly or Yearly granularity. \
  Once set, this filter is applied to all tables on the page, except the MTD table.&#x20;

  *The MTD (Month-to-Date) table* *has a predefined time frame and always shows month-over-month comparison.*

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

* Use **Event date** filter to get results that happened in the selected time frime\
  Once set, this filter is applied to all tables on the page, except the MTD table. \
  *The MTD (Month-to-Date) table has a predefined time frame and always shows month-over-month comparison.*

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

* Use **Registration date** filter to get results only for players registered in the selected time frame.\
  Once set, this filter is applied to all tables on the page, except the MTD table. \
  *The MTD (Month-to-Date) table has a predefined time frame and always shows month-over-month comparison.*

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


# Funnels & Trends

Funnel & Trends reports provide insight on key stages of the acquisition journey how players move through the key stages of the acquisition journey.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

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

## Upper Funnel

**What it is:**\
\
This chart shows conversion rates in the initial stage of the players journey - **from visit to registration.**<br>

**Why it matters**

Measures the efficiency of your affiliate program in converting first-time visitors into new registrations.<br>

**Key Metrics:**

* Visits (Unique) - Count of unique visits, generated on affiliates' tracking links&#x20;
* Registrations - Number of visitors who registered.
* Visits (Unique) to Registrations - Percentage (%) of unique visitors who registered (Count of Registrations divided by Count of Count of unique visits, in %)

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

## Acquisition Funnel

**What it is:**\
\
This chart shows conversion rates in the next stage of the player journey - **from registration to first-time deposit*****.***<br>

**Why it matters:**\
\
Measures the efficiency of your affiliate program in converting registrations into first-time deposits.<br>

**Key Metrics:**

* Registrations - Number of registrations
* Registrations to FTDs - Percentage (%) of registered players who made an FTD (Count of FTDs divided by Count of Registrations, in %)<br>

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

## Trend of Net PnL (NGR) VS. Commission

\
**What it is:**\
\
Compares **revenue generated from affiliate traffic** (Net PnL) with the **fees paid to affiliates** over time.<br>

**Why it matters:**

* Monitors affiliate profitability
* Compare revenue vs. payout obligations
* Optimize commission structures based on real performance data<br>

**Example Insight**

* When Net PnL is significantly higher than Total Commission, the traffic is profitable.
* If Total Commission approaches or exceeds NGR, margins are tight.

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

**Hint**

* Hover over the metrics and
  * click once to toggle metric visibility on and off
  * double click to isolate metric from the chart

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


# KPIs per Affiliate

The KPIs per Affiliate view provides a performance breakdown for each affiliate, combining acquisition data, player activity, revenue, commissions, and ROI in one place.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

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

## Data per Affiliate

\
**What it is:**\
This table displays performance metrics per affiliate within the selected date range.

{% hint style="success" %}
**Total ROI** represents Net PnL / Total Commission
{% endhint %}

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

## Affiliate Quality Scatter (only for the Affiliates with at least 100 Active Players)

\
**What it is:**\
This visual chart helps you easily assess affiliates' ROI.

{% hint style="success" %}
**Active Players** are players that had either a Bet or a Deposit during the relevant period.
{% endhint %}

**How to read it:**

* Each Marker/dot stands for an affiliate (hover over the Marker for more details)
* The chart has two axes:
  * **Axis X** represents **ROI** (Net PnL/Total Commission)
  * **Axis Y** represents **Average User NGR** (Average NGR per player)<br>

**Example Insight**

* The more the marker is located to the right - the better the affiliate's ROI is.
* &#x20;The higher the marker - the better the Player Value.

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


# General Stats

The General Stats view provides a high-level overview of your affiliate ecosystem. It helps you understand how affiliates are distributed by deal types, acquisition and commission contribution.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

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

## Deals Distribution

This section gives an insight of the distribution of your affiliates by commission model.<br>

### Affiliates Database By Deal Commission Type

{% hint style="info" %}
Affiliates that have no existing deal are not present in this chart.\
The category **"Other (None)"** represents affiliates with a **None** deal type. This deal type is used for traffic tracking and link generation only and does not include any commission structure.
{% endhint %}

\
**What is it:**\
\
This chart refers to your **entire** affiliate base and and how they are distributed across different deal types.<br>

**Why it matters:**\
\
Provides a high-level overview of your commission strategy, allowing you to instantly see which deal models dominate your affiliate program

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

### Filtered Affiliates By Deal Commission Type

{% hint style="info" %}
Affiliates that have no existing deal are not present in this chart.\
The category **"Other (None)"** represents affiliates with a **None** deal type. This deal type is used for traffic tracking and link generation only and does not include any commission structure.
{% endhint %}

**What it is:**\
\
This chart isolates the affiliates with active playersduring the filtered time period, and their distribution between different deal types.\
\
*Active players* are defined as users who made at least one bet or one deposit during the filtered period.<br>

**Why it matters:**\
\
It bridges the gap between deal types and actual performance. By highlighting which deals are generating real conversions, it allows you to identify your most productive commission models and spot underperforming or inactive setups.<br>

**Example insight**:\
\
According to the chart, most affiliates with active players operate under deal type 'CPA + RevShare (Net P\&L). This indicates that the hybrid model is currently the most effective driver of sustained player engagement within your affiliate program.

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

### Affiliates Database By Deal Commission Type (incl no-deals)

\
**What it is:**\
\
This chart refers to your **entire** affiliate base and and how they are distributed across different commission plans, including inactive accounts (no active players during filtered period) and those without any deal.<br>

**Why it matters:**\
\
It identifies affiliates who have no active deal, which is critical because affiliates without an assigned deal cannot access promotional links to target your brand.\ <br>

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

### Filtered Affiliates By Deal Commission Type (incl no-deals)

**What it is:**\
\
This chart refers to affiliates who had active players (defined as players with at least one bet or deposit) during the selected timeframe. It visualizes how these affiliates are distributed across various commission plans, explicitly **highlighting those operating without a deal.**<br>

**Why it matters:**\
\
Serves as an early-warning system. It flags an alarming operational risk where affiliates are driving real traffic and revenue, but the system cannot calculate their commission due to a missing deal.

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

### List of Filtered Affiliates By Deal Commission Type (incl no-deals)

**What it is:**\
\
A detailed, row-by-row breakdown of affiliates generated from the *Filtered Affiliates By Deal Commission Type* chart.<br>

**Why it matters:**\
\
Provides granular, actionable data on active affiliates and their commission structures, while also flagging active partners without a deal structure.

<figure><img src="/files/8n8Bhbn1HQU2AYkoD6Jz" alt=""><figcaption></figcaption></figure>

## Status Distribution

\
This section gives an insight of the distribution of your affiliates per acquisition status.

\
**Affiliate Statuses:**<br>

* **New Affiliate:** First time bringing registrations (lifetime)
* **Reactivated Affiliate**: Bringing registrations during the current calendar month after not bringing registrations for at least 2 previous calendar months.
* **No Acq 1-3 month affiliate**: Not bringing registrations during the current calendar month and the last time they did bring registrations was 1 - 3 calendar months ago.
* **No Acq 4-12 month affiliate**: Not bringing registrations during the current calendar month and the last time they did bring registrations was 4 - 12 calendar months ago.
* **No Acq 12+ month affiliate**: Not bringing registrations during the current calendar month and the last time they did bring registrations was 12+ calendar months ago.
* **Active Affiliate**: Affiliate that brings registrations regularly<br>

### Affiliates Database by Current Status

\
**What it is:**\
\
This chart shows a split of your entire affiliate base by their current acquisition status.<br>

**Why it matters:**<br>

* Indicates lifecycle distribution
* Helps evaluating churn rate across your affiliate base
* Helps identifying high-impact status groups<br>

**Example insight**:\
\
The majority of your affiliates have not brought acquisitions in more than 12 months, while only a small portion of your affiliates are Active. This means you can focus more on attarcting new affiliates.

<figure><img src="/files/4JhvVwz3NtU6jdEbxXKA" alt=""><figcaption></figcaption></figure>

### Active Players by Affiliate Status

**What is it:**\
\
This chart shows how your active players are distributed across different affiliate statuses.\
Active players are players that had either a Bet or a Deposit during the relevant time period.\
\
\
**Why it matters:**<br>

* Helps you identify which affiliates are driving the most engaged and valuable players.
* Supports data-driven decisions for optimizing affiliate management, rewards, or retention strategies.

\
**Example Insight:**

Most of your current active players are brought by active affiliates, but there’s a meaningful contribution from affiliates with no new acquistions for > 12 months. This highlights the value of maintaining relationships with your long-term affiliates as well.

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

### RevShare Commission by Affiliate Status

**What is it:**\
\
This chart shows split of Rev Share fees calculated for the filtered period (Amount and %) between different affiliate groups.\
\
\
**Why it matters:**\
\
Identify high-value groups.

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

## Top-Fee Affiliates with no Acquisition

\
**What is it:**\
\
This table shows you your top-performing affiliates per Rev Share with no newly registered players for the selected time period.\
\
\
**Why it matters:**\
\
Helps you identify which are the affiliates who are bringing significant revenue from old acquistions.

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


# Analysis

Cohort Reports provide insights into player deposit behavior over time, acquisition quality and trends based on player seniority and first-time deposit activity.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

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

## Deposit Cohort

\
**What is it:** \
\
The Deposit Cohort tracks deposit activity among acquired players during the first month of activity and follows their deposit contribution in the following months.\
\
**Why it matters:**

* Identify affiliates whose players keep depositing over time
* Spot affiliates with fast deposit decay and optimize deals to reflect true value.

**How to read it:**

As shown in the cohort table below, players who **registered in 12/2024** generated the following deposit activity:

> $ 30,741,581 total deposit amount in same month as registration month (02/2026)\
> \
> $ 22,343,699 total deposit amount in the first month following registration month (03/2026)\
> \
> $ 11,545,836$ total deposit amount in the same month as registration month (03/2026)<br>

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

## Deposit Amount split by Players' Seniority

\
**What is it:** \
\
The table tracks the monthly deposit activity contribution, split by the users' seniority (between the registration month and the activity month)\
\
**Why it matters:**

* Highlights trends that impact revenue sustainability of acquired traffic.
* Recognize trends such as strong initial deposits followed by drop-offs or consistent long-term activity.<br>

**How to read it:**

* The Y-axis represents the percentage of total deposit amount for the given month, scaled from 0% to 100%.
* The X-axis lists the specific months based on your filters
* The stacked bars for each month show the deposit contribution for different seniority categories:<br>

  * **same-month** (Dark Green): Deposits from players who registered in same month.
  * **1-3 months** (Light Blue): Deposits from players who have registered in the past 1 to 3 months.
  * **4-6 months** (Red): Deposits from players who have registered in the past 4 to 6 months.
  * **7-12 months** (Yellow): Deposits from players who have registered in the past 7 to 12 months.
  * **13-24 months** (Light Green): Deposits from players who have registered in the past 13 to 24 months
  * **24+ months** (Dark Blue): Deposits from players who have registered in the past more than 24 months.

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

**Hint**

* Hover over a bar to see the deposit amount in a specific seniority category or hover over the month column to see the deposits amount in each seniority categry in the given month<br>

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

Affiliates' AVG First Deposit Amount Trend by Registration Month <br>
---------------------------------------------------------------------

**What is it:** \
\
This table shows the acquisition quality trend for each affiliate using the **average first deposit amount (FTD)** as the main indicator.

\
**Why it matters:**

* Evaluate which affiliates bring players who start with higher deposits, and how this behavior evolves month by month.<br>

**How to read it:**

* The left column lists the affiliates by 'Affiliate name'
* The top row shows the players' registration months (based on the selected filters)

  * **AVG First Deposit Amount:** Average amount of all FTDs made by players recruited by each affiliate during that particular month.&#x20;

  \
  To analyze an affiliate, read across their specific row.

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


# Detailed View

The Detailed View reports provide insight to your top performing affiliates and players.

The below Dashboard is accompanied by its' **personal AI Analyst.** Hitting the "AI Analysis" button on the dashboard tab will explore the charts and the tables, outline the positive and the negative points, and suggests the ways to optimize your affiliate program based on the actual data.

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

## Top 20 Players - by Commission

\
**What is it:** \
\
This table shows the top performing players (by commission generated for the affiliate) in the filtered period

\
**Why it matters:**

* Recognize high-value players<br>

**Key Metrics:**

* **Ext. Customer ID** - External customer ID of this player (as known in your PAM)
* **Affiliate id** - Unique identifier of the affiliate player belongs to
* **First deposit date** - Date when the player made an FTD
* **Brand Name** - The brand this player belongs to
* **Deposit Amount** - Total deposit amount brought by this player
* **PnL (GGR)** - Total PnL (GGR) brought by this player
* **Net PnL (NGR)** - Total Net PnL (NGR) brought by this player
* **Commission** - Total commission generated by this player

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

## Top 20 Affiliates - by Commission

**What is it:** \
\
This table shows the top performing affiliates in the filtered period

\
**Why it matters:**

* Understanding which affiliates perform best allows you to optimize marketing spend, campaigns, and deals for maximum ROI.
* Helps focus efforts on the most productive partnerships.<br>

**Key Metrics:**

* **Affiliate Username** - Unique identifier of the affiliate
* **Affiliate ID** - Unique identifier of the affiliate
* **Deal Group Name** - Name of the affiliate's deal&#x20;
* **Deposit Amount** - Total deposit amount brought by the players of this affiliates
* **PnL (GGR)** - Total PnL (GGR) brought by the players of this affiliates
* **Net PnL (NGR)** - Total Net PnL (NGR) brought by the players of this affiliates
* **Commission** - Total fees generated by this affiliate

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

**Hint**

* Click on the arrow on any of the columns to sort results in increasing or decreasing order&#x20;

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


# Reporting interfaces  / BI

{% hint style="info" %}
In Media Report, the 'Visits (unique)' statistics are updated in minutes after the visit is recorded.\
Registrations and financial data are updated according to how often your platform provider sends data to TAP.
{% endhint %}

## Registrations Report

Registration report is a granular level report, showing each specific user/player per row.\
You can find the registration report:

* in the **affiliate profile** (report will show only registrations assigned to this affiliate). Results in the list can be filtered out by different criterias<br>

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

* in the **Registrations** menu (report will show all registrations). Results in the list can be filtered out by different criterias

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

\
The **Registrations** report includes the following data:

* External user ID, TAP user ID + Registration Date + Brand + Username (if sent to TAP by the platform) + Affiliate)
* Qualification date&#x20;
* Net deposit amount, FTD amount + date, Deposits count&#x20;
* Withdrawals amount&#x20;
* P\&L (GGR)&#x20;
* Net P\&L (NGR) - This value is a calculated field = (total\_bets)-(total\_wins)-(bonuses)-(deductions)&#x20;
* Volume (total bets, also used as a qualification rule for CPA deals)
* Commission

\
The registration report can be sorted by any of the fields presented as column names.

You can search by user ID (external ID or TAP ID with @1234), by username, email, tracker and country (2 letter code)

#### Adding filters to Registration report:

1. Click on the triangle icon on the top right of the report
2. Choose additional filter:

* Brand
* Link&#x20;
* Commission range - Filter by amounts of commission generated from user/player
* Deal type (CPA, CPA+Revshare Net P\&L, CPA+CPL, etc.)&#x20;
* Has Commission (yes/no)&#x20;
* Blocked for CPL
* Blocked for CPA
* Registration status - If applicable (Duplicate, Fraud, Self-excluded etc). The platform provider should sent the abovementioned statuses&#x20;
* FTD date&#x20;
* AFP/UTM - Search by specific dynamic parameter used when sending the traffic&#x20;
* Campaign/Source ID/ Deal group ID

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

#### Exporting registration report:

Click on the *Export* button on the top right corner. \
Export process will be started and when completed, email with download link will be sent to your email address.&#x20;

{% hint style="success" %}
The fields available to the affiliate in the registration report are controlled by the “additional permissions” list in the Affiliate Account.\
Check [Additional permissions](/affiliate-platform/affiliate-account#additional-permissions) for more details.
{% endhint %}

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

### Player Profile&#x20;

By clicking on a player row in the registration report you will access the Player Profile with all the aggregated information for the player.<br>

<figure><img src="/files/51q8W9wwUZVnyGMI9dXt" alt=""><figcaption></figcaption></figure>

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

## Media Report

Media report is designed to show results by different channels and affiliates, with the ability of *grouping* or *filtering* by different dimensions.

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

The media report is similar to a Pivot table in Excel. **Drag & Drop** the dimensions you want to filter, or group by into the report. \
*Filter by* when you want to individualize your report. *Group by* when you want to generalize your report

\
***For example:***&#x20;

\
Filter by a **time period**

<figure><img src="/files/6Opf7Q2yl72u5LxFDdG9" alt="" width="274"><figcaption></figcaption></figure>

&#x20;Group by **Period, Country, Affiliate** etc

<figure><img src="/files/wexYY0lCl3HqUhdwExfU" alt="" width="563"><figcaption></figcaption></figure>

In the example below you can see a report for the current year (January - Today's Date), grouped by Month, and by Affiliate username:

<figure><img src="/files/08ukQgkc9u7QK7CHXNv6" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When you use Dimensions in *Group*, only 5 records will be shown per group by default.\
You can increase the limit of records shown by clicking on the dimension and selecting a higher limit.\
\
![](/files/vtd1RPmGdHGFkPlpj9yR)
{% endhint %}

With the media report you can see results, for example:

* By specific landing pages (see [Destination Links](/affiliate-platform/destination-links) and how to create landing pages)&#x20;
* By specific media banners, emails&#x20;
* By countries, languages&#x20;
* By AFP and/UTM Campaigns (see [Destination Links](/affiliate-platform/destination-links) and how to grab a tracking link)&#x20;
* By specific promo codes (see [Promo codes](/affiliate-platform/promo-codes) and how to create unique promo codes for affiliates&#x20;

-> **Add/remove** columns (measures) that you don't want to see in the report

***For example:*** \
Build a report only showing Net PnL/RevShare<br>

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

Build a report only for Visits/Registrations/FTD to Lead, %/Deposits amount/Net P\&L

<figure><img src="/files/2oH4dXPA76zfBBAZW61Z" alt=""><figcaption></figcaption></figure>

#### Exporting Media Report&#x20;

To export Media Report in a .csv file, follow these steps:

1. Build your report
2. Tick "Collapse rows" to ensure tha all grouping columns will be exported
3. Click on the .csv icon&#x20;
4. Export will be downloaded on your device

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

#### Saving Reporting Views

Building a report can involve applying filters, add/remove measures, customizing the view to fit your specific needs. Instead of rebuilding the report every time, you can save the view for future use. \
This ensures you have a quick access to the data you need.\
\
To save Reporting Views, follow these steps:

1. Build the report you want&#x20;
2. Click on "Settings" icon on the top right corner&#x20;
3. Choose to save the view as *personal* (visible only to you) or *label* (visible to all team members of the operation who have access to the affiliate panel)
4. A modal will open for you to confirm the view name, click OK after
5. Saved view can be later found in "**Views**"

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

## Pixel Log

The Pixel Log will show the operator all the history of the pixels fired back to the affiliates\
Pixel Log includes the following data:

* ID of player + Affiliate to whom pixel was fired
* Action on which pixel was fired (Lead, FTD etc.)
* Type of pixel
* Status (New, Failed, Delivered, Expired etc.)
* Date

Click on the triangle icon for more filtering options.

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

Click on the small arrow to view the server response for the pixel:

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


# Affiliate Metrics and Terminology

This section explains common terms and metrics used across TheAffiliatePlatform. Use this glossary as a reference when navigating through the system, or reviewing reports and analytics.

## Player Activity Metrics

{% hint style="info" %}
*All monetary values are displayed in TAP in the base currency set for your affiliate panel.*
{% endhint %}

{% hint style="warning" %}
*Values marked with \* are calculated by TAP*
{% endhint %}

<table><thead><tr><th width="259.8333740234375">Metric</th><th>Description</th></tr></thead><tbody><tr><td><strong>Visits (unique)</strong></td><td>Count of unique visits from an affiliate link. Multiple visits from the same user are counted as one unique visit if they happen within 1 hour.</td></tr><tr><td><strong>Registrations</strong> </td><td>Count of registered players</td></tr><tr><td><strong>Registration to Visit, %</strong> </td><td>Number of registrations divided by number of visits in %</td></tr><tr><td><strong>FTD to Lead, %</strong></td><td>Number of FTDs divided by number of registrations in %</td></tr><tr><td><strong>Deposits</strong> </td><td>Count of deposits</td></tr><tr><td><strong>Deposits amount</strong> </td><td>Total deposit amount, as reported by platform</td></tr><tr><td><strong>FTDs</strong> </td><td>Count of First-Time Deposits</td></tr><tr><td><strong>FTDs amount</strong> </td><td>Amount of First-Time Deposits, as reported by platform</td></tr><tr><td><strong>Bonus amount</strong> </td><td>Amount of bonuses credited, as reported by platform</td></tr><tr><td><strong>Withdrawals</strong> </td><td>Amount of withdrawals, reported by platform</td></tr><tr><td><strong>Withdrawals count</strong> </td><td>Count of withdrawals</td></tr><tr><td><strong>Chargebacks</strong> </td><td>Amount of chargebacks (cashbacks), as reported by platform</td></tr><tr><td><strong>Deductions</strong> </td><td>Amount of deductions, as reported by platform</td></tr><tr><td><strong>Volume</strong> </td><td><br>Bet amount (wagering), as reported by platform</td></tr><tr><td><strong>Activities count</strong> </td><td>Count of activities (such as bets), as reported by platform</td></tr><tr><td><strong>P&#x26;L</strong></td><td><em>Proflt &#x26; Loss or GGR,</em> as reported by platform<br><br>Usually represents <em><strong>Total bet amount - Total win amount</strong></em></td></tr><tr><td><strong>Net P&#x26;L</strong> *</td><td><em>Net Profit &#x26; Loss or GGR</em><br><br><em><strong>P&#x26;L - Bonuses - Deductions</strong></em> (values are sourced from the data reported by the platform)</td></tr><tr><td><strong>Net P&#x26;L (Casino)</strong> *<br></td><td><em>Net Profit &#x26; Loss or GGR for Casino product only</em><br><br><em><strong>P&#x26;L - Bonuses - Deductions</strong></em> (values are sourced from the Casino product data reported by the platform)</td></tr><tr><td><strong>Net P&#x26;L (Sport) *</strong></td><td><em>Net Profit &#x26; Loss or GGR for Sport product only</em><br><br><em><strong>P&#x26;L - Bonuses - Deductions</strong></em> (values are sourced from the Sport product data reported by the platform)</td></tr><tr><td><strong>Net Deposits</strong> *</td><td><em><strong>Total deposit amount - Total withdrawal amount</strong></em> (values are sourced from the data reported by the platform)</td></tr><tr><td><strong>QFTDs, CPA</strong></td><td>Count of FTDs that are matching CPA qualification rules</td></tr><tr><td><strong>QLeads, CPL</strong></td><td>Count of leads (registrations) that are matching CPL qualification rules</td></tr><tr><td><strong>eCPA</strong> (Effective CPA) *</td><td><em><strong>(CPA commissions ± registration level Adjustments) / FTD count</strong></em></td></tr><tr><td><strong>eCPL</strong> (Effective CPL) *</td><td><em><strong>(CPL commissions + registration level Adjustments) / registrations count</strong></em></td></tr></tbody></table>

## Player Identification Metrics

| Metric               | Description                                                                 |
| -------------------- | --------------------------------------------------------------------------- |
| **Registration ID**  | Internal ID of the registered player, generated by TAP                      |
| **Ext. Customer ID** | External ID of the registered player, received from the integrated platform |

## Balance Metrics (Affiliate)&#x20;

{% hint style="info" %}
*All monetary values are displayed in TAP in the base currency set for your affiliate panel.*
{% endhint %}

| Metric                       | Description                                                                                                                |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **CPA**                      | Commission from CPA deal                                                                                                   |
| **CPL**                      | Commission from CPL deal                                                                                                   |
| **RevShare**                 | Commission from RevShare deal                                                                                              |
| **RevShare (Casino)**        | Commission earned from the Casino portion of a multi-product RevShare deal                                                 |
| **RevShare (Sport)**         | Commission earned from the Sport portion of a multi-product RevShare deal                                                  |
| **Commission, from Sub.Aff** | Commission generated for Parent affiliate from Child affiliate (Sub-affiliates) based on sub-affiliate deal set for Parent |
| **Commissions**              | CPL commission + CPA commission + Rev Share commission + Commission from Sub.Aff                                           |
| **Adjustments**              | Amount of adjustments made to affiliate balance or on registration level (can be positive and negative)                    |
| **Payments**                 | <p><br>Amount of payments processed for affiliate</p>                                                                      |
| **Balance**                  | Commissions + Adjustments - Payments                                                                                       |
|                              |                                                                                                                            |

## **Link and Deal Metrics**

| Metric                                      | Description                                                                                                                                 |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Source ID**                               | Dynamic parameter captured on a player's visit on affiliate link (custom)                                                                   |
| **Campaign Name/Campaign ID**               | Dynamic parameter captured on a player's visit on affiliate link                                                                            |
| **utm\_campaign, utm\_source, utm\_medium** | Dynamic UTM parameters captured on a player's visit on affiliate link (custom)                                                              |
| **afp, afp1,....afp9**                      | Dynamic AFP parameters captured on a player's visit on affiliate link (custom)                                                              |
| **Deal group ID**                           | ID of the deal group. A deal group may include multiple versions and sub-deals.                                                             |
| **Deal ID (version)**                       | ID of a specific version of a deal within the same Deal group ID. Modifying a deal creates a new deal version under the same Deal Group ID. |


# Back Office permissions, and SSO

This section covers access to Back Office, and SSO authorization

There are 2 main permissions roles in TAP back office:

* **Affiliate Admin** - the role with highest set of permissions. Can manage sensitive settings, has access to all affiliates' and players' data/
* **Affiliate Manager** - the role has limited set of permissions. Can manage and see data only of the affiliates assigned to them by Affiliate Admin.

You can find detailed explanation of all roles below.

Important to note that if you manage multiple labels, a specific user can have different permissions towards different labels. So one user can be Affiliate Admin in label A, and at the same time Affiliate Manager in label B.

## Concept of "Home" label <a href="#default-permissions-groups-in-smartico" id="default-permissions-groups-in-smartico"></a>

*If you have only one Label in TAP you can skip reading this section entirely.*

When a new user is created in TAP BackOffice it should be assigned to a specific label as "Home label". You can think of home label as of the main label to which user belongs.&#x20;

Lets say you have started with label "**MyCasino Europe**" and you have created users under this label.

At some point your business is expanding and you created a new label "**MyCasino USA**". From this point:

* you can give to some of existing user access to MyCasino USA
* you can create new users under USA label and they will have access only to USA label
* you can create user with permission to manage back office users under USA label. This user will be able to manage user of USA brand, but will not be able to manage user of Europe label.
* If you decide to close USA label at all, then users that are created under USA label will lost access to TAP at all. Because this was their main label, or what we call "Home" label

Every home label also has definition of "**suffix**" for username, for example your Europe label may have suffix "mycasino", and then all the users under this label should have names in the format like john\@mycasino. Your another label could have same name or different one, depending on your vision.

As a concept, the suffix is reflecting an organizational unit or group in your company.

## Default permissions groups in TAP

Here you can find permission groups of the administrative users in the TAP Back Office

| Role                                    | Allowed to do                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Affiliate Admin                         | <p>Has full access to all affiliates and player data<br><br><strong>Can</strong><br>- Can manage all settings<br>- Can create Destination Links, Promo codes and Media Assets<br>- Can approve/cancel payment requests<br>- Can manage pending affiliates application and assign a Manager to affiliates (everyone can be assigned as Manager, regardless of that is the user's role)<br></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Affiliate Manager                       | <p>Has no access and visibility into the affiliate profiles that are managed by other Managers, nor has access to their players and performances<br><br><strong>Can</strong><br><strong>-</strong> Manage deals and settings related to the affiliates assigned to them<br>- Make payment requests for the affiliates assigned to them<br>- Build tracking links for the affiliates assigned to them<br><br><strong>Cannot</strong><br><strong>-</strong> Manage any global settings<br><strong>-</strong> Manage pending affiliates' applications (review, decline, approve)<br>- View and manage the affiliate profiles assigned to other Managers<br>- View the players/performances of affiliates assigned to other Managers<br>- Assign/re-assign master affiliates in a sub-affiliate network<br>- Make balance adjustments<br>- Approve/Cancel payment requests<br>- Create/edit/disable Destination Links, Promo codes and Media Assets<br>- Manage Marketing resources and campaigns</p> |
| <p></p><p>Affiliate Admin, Limited </p> | <p>Has the same permissions/restrictions as Affiliate Manager, but:</p><p><br><strong>Can</strong><br>- See all affiliates and players data (except affiliates in Pending status)<br>- Can manage the Deals of all affiliates <br></p><p><strong>Cannot</strong> <br>- Change affiliate details and settings in any affiliate profile<br></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

{% hint style="warning" %}
When an affiliate is reassigned to a different manager, the previous Affiliate Manager's access to that affiliate is revoked. They will no longer have access to the the affiliate profile and the data related to them.
{% endhint %}

{% hint style="info" %}
Note that each role can be extended with additional permissions or some possibilities can be restricted from role, for example - **Affiliate Admin** can create a new user with role of **Affiliate Admin**, but exclude the possibility to make adjustments to affiliate's balances
{% endhint %}

## "Additional" and "Restriction" roles

\
Operator can give what is called "Additional roles" to the users.

For example, the Affiliate Manager role doesn't have permission to manage custom tags, but the role can be given to particular user as "Additional role"

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

Also, some permissions can be taken away on user level using "Restriction roles", for example, to make balance adjustments.

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

Current **restriction roles** that can be taken away from the user

| Role                                   | Explanation                                                                                                                     |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Aff:Make affiliate balance adjustments | Removes permission to make adjustments to the affiliate's balance                                                               |
| Aff:Limit managers/admins, variant 1   | <p>Cannot:<br>- Export Affiliates list<br>- Export Registration list<br>- Impersonate affiliate's login (View as affiliate)</p> |

Current **additional roles** that can be granted to the user

| Role                                       | Explanation                                                                                                                                                                                                                                                                                                          |
| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Aff:Make affiliate balance adjustments     | Removes permission to make adjustments to the affiliates' balances                                                                                                                                                                                                                                                   |
| Affiliation \ Access integration files     | Gives access to the integration files log                                                                                                                                                                                                                                                                            |
| Affiliation, manage custom tags            | <p>Gives permission to manage custom tags <br><br><strong>Note</strong>: This permission is part of Affiliate Admin role by default. Can be granted as an additional permission to Affiliate Manager role</p>                                                                                                        |
| Affiliation, Extra - Allow Brands creation | <p>Gives permission to access and manage Brands<br><br>- Activate/Deactivate brands<br>- Apply rule for destination link transformation per brand<br><br><strong>Note</strong>: This permission is part of Affiliate Admin role by default. Can be granted as an additional permission to Affiliate Manager role</p> |

## Authorization with SSO

TAP/Smartico supports Single Sign-On (SSO), currently available for **Google** and **Microsoft** users, with plans to expand support to other providers in the future.

To enable SSO, the client needs to provide the email domain(s) used in their Google Workspace (e.g., **mycompany.com**). This setup allows users with emails under the specified domain (e.g., **<john@mycompany.com>**) to log in using SSO.

{% hint style="info" %}
Note: TAP/Smartico is not supporting authorization using personal mails managed under generally available domains like googe.com, yahoo.com etc. Only company managed emails/domains are supported.
{% endhint %}

**When enabling SSO client must provide**

1. List of company owned **mail domains**, e.g. mycompany.com, mycompany.org
2. **If to allow user creation** on TAP side when new user logins through SSO.  In case "yes", then specify:
   1. The **default permission role** to be assigned to new users (e.g., "Affiliate Admin", "Affiliate Manager").
   2. The **TAP label(s)** to which newly created users will have access. E.g. label ids - 4444 and 4445
   3. Which of the listed in point "b" labels will be assigned as "home" label (in case of having more than one label)<br>

The logic of user matching and permissions assignment

* **For new users**: New users logging in via SSO will&#x20;
  * automatically be assigned access to the specified label(s), listed in point 2b
  * they will get the default permission role as specified in point 2a
  * they will have "home" label assigned according to point 3c
* **For existing users:** If an existing user logs in via SSO, they will be matched by their email address and retain their current set of permissions.

{% hint style="info" %}
It is also possible **not to allow user creation** when new user logins through SSO.
{% endhint %}

Template of the request for enabling SSO:

<table data-header-hidden><thead><tr><th>Configuration</th><th>Value</th><th data-hidden></th></tr></thead><tbody><tr><td>Mail domain(s)</td><td>mycompany.com, mycompany.org</td><td></td></tr><tr><td>Allow new users creation</td><td>YES/NO</td><td></td></tr><tr><td>List of label IDs</td><td>4444,4445</td><td></td></tr><tr><td>Home label ID</td><td>4444</td><td></td></tr><tr><td>Default permission</td><td>Affiliate Admin</td><td></td></tr></tbody></table>


# API Keys and URL

### **Obtaining API key for Affiliate**

In order to use the API, it needs to be enabled for the affiliate. \
To enable API for affilaite:

1. Go to 'Overview' page in the affiliate account
2. Go to 'API' and toggle on
3. Click 'Save & Create API key'
4. A modal will open asking you to confirm the action

{% hint style="danger" %}
&#x20;Copy the API key or instruct affiliate to find it in their profile (***'Account Settings'***)
{% endhint %}

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

### **Obtaining API key for Operator**

You can get your API Key and the API URL from the '***Settings***' section of the TAP BackOfifce

{% hint style="danger" %}
The default API endpoint is **<https://boapi.smartico.ai/>**, but depending on your setup it could be different. Check for the exact URL in the '***Settings'*** section.
{% endhint %}

Click on GENERATE API KEY to generate ***'API Key to access Media reports, Balance API and Affiliates data'***<br>

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


# Registration page

{% hint style="info" %}
This document describes how to customize UI and fields in the registration page and backoffice for the affiliates via API.

You can also check [Registration API](/apis-and-configurations/registration-api) if you want to implement own registration page.
{% endhint %}

TAP is providing a default affiliate registration page for all operators.

An Example of the page can be seen at this address - <https://aff.theaffiliateplatform.com/>&#x20;

## **The page is supporting**

* Different languages ( Go to **Affiliate Desk \ Settings** , to set the default language and available languages for your registration page)
* All the texts can be adjusted by the operator from TAP BackOffice (Go to **Tools** \ **Translation\Values'** screen to find the relevant translation keys for registration page (Affiliation) and affiliates backoffice/login page (Affiliation Admin)

<figure><img src="/files/4iuOPJLq1IKI42u73TIB" alt=""><figcaption></figcaption></figure>

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

* Can be customized with CSS and additional JavaScript from the TAP BackOffice. &#x20;

## **The page can accept different parameters in the URL**

* <https://aff.theaffiliateplatform.com/?**lang=uk>\*\* - opens in the specified language&#x20;
* <https://aff.theaffiliateplatform.com/?**tc=true>\*\* - opens Terms & Conditions window
* <https://aff.theaffiliateplatform.com/?**mgr=123>\*\* - registered affiliate will be assigned to the manager with ID 123 and the affiliate will be automatically approved. You can prevent automatic approval by adding **\&auto\_approve=false** to the URL
* <https://aff.theaffiliateplatform.com/?**paff=456>\*\* - affiliate will be assigned as a child to the affiliate with ID 456
* <https://aff.theaffiliateplatform.com/?**registration\\_source=FB123>\*\* - affiliate will be marked with the tag FB123 as the registration source
* <https://aff.theaffiliateplatform.com/?**ext\\_affiliate\\_id=12345> -\*\* affiliate will have their external ID set to the value specified in the URL. Only unique values are accepted. If an existing affiliate already has the same external ID, the registration will not be successful.

## Customizing page UI

You can provide custom CSS, colors, and background of the page in the **Settings \ Custom JS & CSS (REG. SCREEN)** section. <br>

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

Please check the example below.

```html
<style>
	body {
		background-image: url('https://static.smr.vc/2576047dbc254e7266bfc9-WheelBg, pumpkins.jpg');
		background-color: transparent !important;
		background-size: cover !important;
		color: #fff !important;
	}

	#reg_form {
		padding: 40px !important;
		background-color: #000;
	}

	form label {
		color: #fcd004 !important;
		font-weight: bold !important;
	}

	form input,
	form select,
	form textarea {
		border-color: #fcd004 !important;
		border-width: 2px !important;
		border-radius: 6px !important;
	}

	form>div>div.input-group>input,
	form>div>div.input-group>select,
	form>div>div.input-group>textarea {
		border-color: #fcd004 !important;
		border-top-right-radius: 6px !important;
		border-top-left-radius: 0px !important;
		border-bottom-right-radius: 6px !important;
		border-bottom-left-radius: 6px !important;
		border-width: 2px 2px 2px 0px !important;
	}

	form .input-group .input-group-prepend span {
		background-color: #fcd004 !important;
		border-color: #fcd004 !important;
		border-width: 2px 0px 0px 0px !important;
		border-top-left-radius: 6px !important;
		border-bottom-left-radius: 6px !important;
	}

	form button.btn-primary[type="submit"] {
		color: #fff;
		background-color: #fcd004;
		border-color: #fcd004;
	}
</style>
```

#### Add a custom favicon (browser tab icon)&#x20;

To add a favicon that appears in the browser tab, bookmarks, or address bar on your registration page, you can see the example below<br>

```html
<head>
<link rel="icon" id="favicon" href="/img/favicon.ico">
<head>
```

## Change the set of required fields

You can change a set of required fields in the **Settings \ Custom CSS & JS** section. Please check the example below

```html
<script>
$('#web_site_url').attr('required', 'true');
</script>
```

You can also make some fields optional or even hide them

```html
<script>
	$('#skype').attr('required', false);
	$('#company').attr('required', false);
	$('#web_site_url').attr('required', false);
	$('#comments').attr('required', false);
	$('#country').attr('required', false);


	$('#skype_block').css('display', 'none');
	$('#company_block').css('display', 'none');
	$('#web_site_url_block').css('display', 'none');
	$('#comments_block').css('display', 'none');
	$('#country_block').css('display', 'none');
</script>
```

## Terms and Conditions

When registering as an affiliate, applicants must accept the platform’s Terms & Conditions. This step ensures compliance with the program’s rules and policies.\
\
To add Terms and Conditions:

1. Go to '**Tools**' header > **'Translation \ Values'** screen
2. Use the filtering options to find Registration page translation keys&#x20;
3. Select **'reg\_tc'**
4. Add Terms and Conditions (in HTML format) for the respective language/s

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

<figure><img src="/files/8uthSUAp8lQs8URThJbI" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
To apply Terms & Conditions for the English version of the affiliates' registration page, you can apply it either in 'Translation keys' or in **Settings >** **T\&C (HTML)**&#x20;
{% endhint %}

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

## Customizing login page for affiliates

TAP provides a fully configured affiliate portal, serving as a login page and user interface for affiliates.\
You can apply custom JS for affiliates UI in **Settings \ Custom JS (AFF.APP).** Please check the example below

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

```html
<!-- Start of Custom Drive Link Widget -->
<script>
  (function() {
      var widget = document.createElement("div");
      widget.style.position = "fixed";
      widget.style.bottom = "20px";
      widget.style.right = "20px";
      widget.style.background = "#007bff";
      widget.style.color = "white";
      widget.style.padding = "10px 20px";
      widget.style.borderRadius = "8px";
      widget.style.cursor = "pointer";
      widget.style.boxShadow = "2px 2px 10px rgba(0, 0, 0, 0.2)";
      widget.style.fontFamily = "Arial, sans-serif";
      widget.innerText = "T&C";
      widget.onclick = function() {
          window.open("https://docs.google.com/document/d/1-4TCqsn3v_tQpIYSMVoZ7jb3IF5LSqDZIK8-7rinIL4/view", "_blank");
      };

      document.body.appendChild(widget);
  })();
</script>
<!-- End of Custom Drive Link Widget -->

```

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

## Supported languages and default language

\
**Location**:\
Affiliate Desk > Settings

* To set the supported languages for the affiliate registration page and login panel, select the desired language(s) from '**Available languages**' drop down menu.
* To set a default language for the affiliate registration page and login panel, select the preferred language from the **'Default Language'** drop down menu. The registration and login pages will open in the language variation set as the default.<br>

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


# Registration API

{% hint style="info" %}
This document describes how to build a custom registration page for the affiliates via API.
{% endhint %}

{% hint style="danger" %}
The default API URL is **<https://boapi.smartico.ai/>** but depending on your setup it could be different. Check for the exact URL in the '***Settings***' section.
{% endhint %}

### Affiliate registration API

An Operator can implement their own affiliate registration page that is using TAP API.

The API is using simple HTTP-POST to the URL <https://boapi.smartico.ai/api/register-aff>

POST body is JSON in format

```json
{
	"hostname": "aff-home.smartico.ai”, // the domain host from which the affiliate will register
	"first_name": "First-name",
	"last_name": "Last-name",
	"bo_user_email": "somemail@somewhere",
	"phone_number": "44097657269",
	"username": "username123",
	"password": "Q!w2e3r4",
	"skype": "skype",
	"company": "Astelit",
	"web_site_url": "https://googe.com",
	"country": "BG",
	"comments": "some info",
	"language": "FR",
	"tc": true,
	"token": "03AGdBq261a4cR1-w32PCilF0nq04_cjKIl8T6OeWlAnC4fWfYu94Mw6VIEdazhgDwcf_UkN1pBmTSixVNKKVXXyi-4f3f77VKQkgGKdCUs-dREm_YmwtMfYkgHj00YsQz0T3S3fHRP-XYgJkk0M7bUcaB3Lf6DA7gmZtQynXssdX3a5ElmyEJf5NTTX5IfmS3oiIL0OWWCxFiDfyPdTOoZJAjL9fMcFoqCD2_cJDiqZMNjLCIaUDQX1LgAaEr96FJ3dJ1vUwB3RnU3O-mefSffMvQtkQa-19CK78mpmQ6gDDCXD9zmdumH_aowNGyqN2BTgkrM0vwk4tmKRn6vDY5ue58jZItI7660oI3YfA96N43U_scBSBOC12qmpzNMf_T7esq3kJJTgH_rw8uQSzZk3bncCE2bPjeFg"
}
```

Notes regarding parameters:

* Password should be at least 6 characters, have one lowercase letter, one uppercase letter, and one number
* The following fields are mandatory: 'first\_name', 'last\_name', 'username', 'password', 'bo\_user\_email', 'country', 'tc', 'hostname', 'token'
* Hostname should match exactly to the hostname that is configured in TAP BackOffice for the operator. Only one hostname is allowed.
* Username should be 6 characters minimum
* The system is not allowing duplicate usernames and mails
* Language parameter should be ISO 2 symbols code of language
* If you are submitting Microsoft Teams contact details, use 'skype' parameter

You can also pass optional parameters

```typescript
// new affiliate will be assigned as a child of specified parent_affilaite_id
parent_affiliate_id: number; 

// affiliate will be assigned to a specific manager 
// and automatically approved (otherwise he is in a pending state)
manager_id: number; 

// FaceBook page for contact   
contact_fb: string;

// VK page for contact
contact_vk: string;

// Telegram page for contact
contact_telegram: string;

// Additional permissions for the affiliate. 
// Check "More API Methods" page for possible Role IDs
extra_role_ids: number[];

// ID of the Affiliate in the external system
ext_affiliate_id: string;

// Payment method and respective payment method details of the affilaites
// Check "More API Methods" page for possible payment methods
payment_method_id: number;
payment_method_details: {
  [key: string]: any
}
 
```

The API can return the following error codes

```typescript
enum AffApiErrors {
   OK = 0,
   BOT = -1,
   FORM_NOT_VALID = -2,
   USERNAME_RULE_NOT_VALUD = -3, // Username should be at least 6 symbols
   CANNOT_FIND_AFFILIATE_OPERATOR_BY_HOST = -5, // the ‘hostname’ as parameter is identifying an ‘operator’. System can support multiple operators. See explanation below
   FAIL_IN_REGISTRATION_FLOW = -6,
   USERNAME_ALREADY_EXISTS = -7,
   EMAIL_ALREADY_EXISTS = -8,
   PASSWORD_STRENGTH = -9, // Password should be at least 6 symbols, have one lowercase later, one uppercase later and one number
}
```

Setting up Google ReCaptcha on the front end.

Add the following script on your front-end

```html
<script src="https://www.google.com/recaptcha/api.js?render=6LeR49UfAAAAAO7J7vKDCD4vM-Lq5ZA_NsquS9J_"></script>

// Obtain the token in the following way
<script>
var _reCAPTCHA_site_key_ = '6LeR49UfAAAAAO7J7vKDCD4vM-Lq5ZA_NsquS9J_';
grecaptcha.execute(_reCAPTCHA_site_key_, {action: 'affregistration'}).then(function(token) {
   // pass token to the API call to Affiliate registration API
 });
 </script>

```

It's also possible to make API calls from the server side (backend) without using re-captcha protection.&#x20;

To disable re-captcha verification for your setup:

1. Go to **Settings**
2. Set '*Enable recaptcha on the registration page and API*' on No
3. Click **Save**

<figure><img src="/files/21L9SObe33oxRctDVuUk" alt=""><figcaption></figcaption></figure>


# Reporting API

{% hint style="info" %}
This document describes how to get affiliation metrics via API (commission, balance, registrations, etc.).

It can be used by the Operator - to get metrics for all affiliates.

Or it can be used by the Affiliate - to get only their own metrics.
{% endhint %}

{% hint style="danger" %}
The default API URL is **<https://boapi.smartico.ai/>** but depending on your setup it could be different. Check for the exact URL in the '***Settings***' section.\
\
***If you are an affiliate***, check for the exact URL in '**Account Settings**' section in your profile.
{% endhint %}

TheAffiliatePlatform (TAP) provides API to retrieve configurational, operational, and analytical data. API is provided as a REST over HTTP and uses SSL for data protection.

Reporting API is designed for the high level aggregated reporting (aggregated overview per operation/affiliate and not per individual user).

Affiliates can use API to get reports related to the activities of their own traffic and for the Operator to have access to all affiliates' data.

## **API for the Affiliate**

### Accessing analytical data

The Affiliation system has an API endpoint that provides statistical information about visits, registrations, commissions, etc., aggregated by a specified period or for a lifetime.

Example of the API call using CURL:

{% code overflow="wrap" %}

```bash
curl --location --request GET 'https://boapi.smartico.ai/api/af2_media_report_af?aggregation_period=DAY&group_by=utm_campaign,utm_medium,utm_source,afp&date_from=2022-07-12&date_to=2022-07-14' --header 'authorization: your_api_key'
```

{% endcode %}

Example of API call using NodeJs:

```javascript
var request = require('request');
var options = {
 'method': 'GET',
 'url': 'https://boapi.smartico.ai/api/af2_media_report_af?aggregation_period=DAY',
 'headers': {
   'authorization': 'your_api_key'
 }
};
request(options, function (error, response) {
 if (error) throw new Error(error);
 console.log(response.body);
});

```

Parameters in API call:

* As **aggregation\_period** you can pass DAY, MONTH, YEAR, or keep it empty in order to get aggregate data for the lifetime.&#x20;
* Optional parameter group\_by could have a comma-separated list of the fields to group results. Possible values are:&#x20;
  * utm\_campaign
  * utm\_medium
  * utm\_source
  * afp, afp1, afp2.... afp9
  * link\_id
  * brand\_id
  * campaign\_id
  * source\_id
  * deal\_root\_original\_id
  * registration\_id (requires "Registrations report" permissions)
  * ext\_customer\_id (requires "Registrations report" permissions)
  * username (requires "Registrations report" permissions)
* Optional parameters **date\_from** and **date\_to** could be used to limit results for the defined period. The format of the date is YYYY-MM-DD

{% hint style="danger" %}
Important note regarding setting date\_from and date\_to parameters.&#x20;

* date\_from is inclusive
* date\_to is exclusive

This means that for the request with date\_from = 2022-07-12 and date\_to=2022-07-14, API will return data for 12 and 13 July only.<br>

* `date_from` and `date_to` must always be used **together** -  either provide both parameters or omit both. Providing only one of them is not supported.
  {% endhint %}

Example of response:

```json
 
{
   "meta": {
       "affiliate_id": 34598,
       "operator_currency": "EUR",
       "operator_public_name": "Supper Affiliate",
       "operator_bo_domain": "https://admin.aff.smartico.ai/",
       "operator_image_url": "https://static.smartico.ai/73a6af827f2162f79c7996-cropped-FBLogo.png"
   },
   "data": [{
       "dt": "2020-08-01T00:00:00.000Z",
       "link_id": "29",
       "link_name": "test redirect",
       "brand_id": "5",
       "brand_name": "XP",
       "visit_count": 4,
       "registration_count": 24,
       "qftd_count": 0,
       "qlead_count": 0,
       "deposit_count": 2,
       "deposit_total": 40,
       "net_deposits": 20,
       "net_pl": 70,
       "net_win": 100,
       "pl": 100,
       "net_pl_sport": 30
       "net_pl_casino": 40
       "ftd_count": 2,
       "ftd_total": 40,
       "bonus_amount": 30
       "withdrawal_count": 1,
       "withdrawal_total": 20,
       "chargeback_total": 0,
       "operations": 5,
       "volume": 10,
       "commissions_cpl": 0,
       "commissions_cpa": 0,
       "commissions_rev_share": 5,
       "deductions": 0,
       "sub_commission_from_child": 0,
       "adjustment_affiliate": 0,
       "adjustment_registration": 0,
       "payments": 0,
       "conversion_rate": 0.08333332986111125,
       "net_deposit_total": 20,
       "commissions_total": 5,
       "adjustments": 0,
       "balance": 5
   }, {
       "dt": "2020-07-01T00:00:00.000Z",
       "link_id": "4",
       "link_name": "Test/XPK-Registration",
       "brand_id": "5",
       "brand_name": "XP",
       "visit_count": 7,
       "registration_count": 0,
       "qftd_count": 0,
       "qlead_count": 0,
       "deposit_count": 0,
       "deposit_total": 0,
       "net_deposits": 30,
       "net_pl": 40,
       "net_win": 80,
       "pl": 80,
       "net_pl_sport": 25
       "net_pl_casino": 15
       "ftd_count": 0,
       "ftd_total": 0,
       "bonus_amount": 40,
       "withdrawal_count": 0,
       "withdrawal_total": 0,
       "chargeback_total": 0,
       "operations": 2,
       "volume": 20,
       "commissions_cpl": 0,
       "commissions_cpa": 0,
       "commissions_rev_share": 0,
       "deductions": 0,
       "sub_commission_from_child": 0,
       "adjustment_affiliate": 0,
       "adjustment_registration": 0,
       "payments": 0,
       "conversion_rate": 0,
       "net_deposit_total": 0,
       "commissions_total": 0,
       "adjustments": 0,
       "balance": 0
   }]
}

```

<figure><img src="https://lh6.googleusercontent.com/X8R5M7yv2UPvLzfsYZggeFtLKPZiv9C0uyT7dIzHzA5ZSTLqyqpXjIR6Zrdi508rQBCDYYBjMAiPnq0ZyxMLBwvemx4sjOWe7uPL-isbr-fDHTE9hObgIE6wjCCD9wvQ7ZbTlPsdQozWliDzZwmVyxs4aFTGr8K-b7CRMMBV4MyY2OnjdfsOaYgy" alt=""><figcaption><p>Report in the UI</p></figcaption></figure>

## API for the Operator

### Accessing analytical data

Operator API is similar to the Affiliate API.<br>

Example of the API call using CURL:

{% code overflow="wrap" %}

```bash
curl --location --request GET 'https://boapi.smartico.ai/api/af2_media_report_op?aggregation_period=DAY&group_by=utm_campaign,utm_medium,utm_source,afp&date_from=2022-07-12&date_to=2022-07-14' --header 'authorization: your_api_key'
```

{% endcode %}

The difference between APIs:

<table><thead><tr><th width="188">.</th><th>Affiliate API</th><th>Operator API</th></tr></thead><tbody><tr><td>Method name</td><td>af2_media_report_af</td><td>af2_media_report_op</td></tr><tr><td>Possible values for group_by parameter</td><td>afp(1..9), utm_campaign, utm_medium', utm_source, link_id, brand_id, source_id, campaign_id, registration_id, ext_customer_id, username</td><td>affiliate_id, registration_id, ext_customer_id, username, afp(1..9), utm_campaign, utm_medium, utm_source, link_id, brand_id, campaign_id, source_id, deal_root_original_id,  child_affiliate_id, manager_id</td></tr><tr><td>Possible values for filtering data</td><td>date_from, date_to</td><td>date_from, date_to, affiliate_id, brand_id</td></tr></tbody></table>

## **Important to know**

* All amounts are in operator currency
* As TAP is providing an affiliation system as a white-label solution, you can find the name, domain, and image of the “Operator” operating affiliation system in response to API calls.
* In grouping by "day",  the report will show the change of commission during this day. It's not a total commission at the end of the day.
* If you are querying aggregated data and there are no activities for a specific period, the record for a specific period will be missing in response.\
  **Note that not all attributes are available for every affiliate. Visibility depends on the Additional Permissions granted to each Affiliate**
* If you query for aggregated data, the response will show only changes for a specified period. Given the example in the image below, you should treat it in the following way:&#x20;
  * During July, the affiliate had a change of balance “-795.50 EUR”, and because it was his first month, at the end of the month, his balance will be -795.50 EUR
  * During August, he had a positive change, +225 EUR. This means that his balance was “-570.50 EUR at the end of August.”
* "manager\_id" value can be passed as 123 or as 123,456

<figure><img src="https://lh3.googleusercontent.com/19n6WKNHzrea_cVwHxqVDlLcP5_IQC74p2iYZpUxXVuhVsQk-aAanObQ-8YJQHfQs1mnrqMEknE43B02WikAUegu1oXdNq-Qzg3o4MLZLWXVzMtznsvkp9eolz6m30lE2a-U7wLZ41RbA6-5VBDPiU-MVisKt1t8Qy6jTuygxmXqoiVV48iDofSI" alt=""><figcaption><p>Example of rolling change of balance</p></figcaption></figure>


# Balance and Payment API

{% hint style="info" %}
This document describes how to get the current balance for affiliates and make payments/adjustments via API.
{% endhint %}

{% hint style="danger" %}
The default API URL is **<https://boapi.smartico.ai/>** but depending on your setup it could be different. Check for the exact URL in the '***Settings***' section.
{% endhint %}

TheAffiliatePlatform (TAP) provides API to get the current balance of the affiliates and make payments. API is provided as a REST over HTTP and uses SSL for data protection.

## Getting balances for all affiliates

Operator API is similar to the Affiliate API.

Example of the API call using CURL:

{% code overflow="wrap" %}

```bash
curl --location --request GET 'https://boapi.smartico.ai/api/af2_balance_op?filter={"above_threshold":true,"to":"2025-04-30T23:59:59Z"}&range=[0,9]' \
--header 'Authorization: cc1a4c56-44de-11ed-a835-04d6e06175364b-2354'
```

{% endcode %}

The parameter **above\_threshold,** when set to true, will filter only affiliates that have a positive balance (or balance above the threshold set on the operation level).  \
The parameter **to** will filter only the due balances until a specific date.\
\
You can also pass **affiliate\_id** as the parameter to get results only for a specific affiliate.

The API is returning a list of affiliates with details for each one. The most important parameters are:

* affiliate\_id
* balance - the current, not paid commission for this affiliate
* commissions\_total - total lifetime commission earned by the affiliate
* payments - already paid amount
* threshold - the minimal amount in the operator currency that the operator is going to pay to the affiliate (above\_threshold parameter is using this value for the filter)

Example of full response

{% code lineNumbers="true" %}

```json
[
    {
        "id": 35427,
        "affiliate_id": 35427,
        "affiliate_name": "Master",
        "payment_method_details": {
            "bank_name": "ggg",
            "beneficary": "gggg",
            "swift_code": "g",
            "back_country": "ggg",
            "erc20_wallet": "11111",
            "paypal_email": "1223564",
            "trc20_wallet": "12345",
            "account_number": "ggg"
        },
        "aff_status_id": 2,
        "payments": 482375.82,
        "last_payment_date": "2024-02-26T12:36:48.147Z",
        "adjustments": 10440.71052180003,
        "cpl_fee": 0,
        "cpa_fee": 216349,
        "rev_share_fee": 295535.57972609997,
        "sub_affiliate_fee": 0,
        "deposit_amount": 3510143.7671,
        "ftd_amount": 85595.6949,
        "deposit_count": 27908,
        "ftd_count": 47404,
        "registrations_count": 28670,
        "payment_method_id": 4,
        "payment_method_name": "PayPal",
        "auto_payment_enabled": null,
        "manager_id": 56427,
        "treshold": 300,
        "not_processed_payment_amount": 1,
        "create_date": "2022-03-10T18:44:52.983Z",
        "commissions_total": 511884.57972609997,
        "balance": 39949.47024789999,
        "operator_currency": "EUR",
        "user_id": 56427,
        "manager": "luana@smartico",
        "manager_contacts": {
            "phone": "",
            "email": "support@smartico.ai",
            "skype": "some",
            "telegram": "",
            "fb": "",
            "vk": "",
            "discord": null,
            "whatsapp": null,
            "first_name": "Luana",
            "last_name": "T"
        }
    },
    {
        "id": 217628,
        "affiliate_id": 217628,
        "affiliate_name": "Sevginar test",
        "payment_method_details": {
            "ana": "aaa",
            "istpay_cpf": "1234567",
            "pay4fun_cpf": "1234567",
            "trc20_wallet": "123456",
            "netteller_vat": "12233112",
            "netteller_email": "support@smartico.ai",
            "netteller_account_number": "123123"
        },
        "aff_status_id": 2,
        "payments": 20,
        "last_payment_date": "2024-03-28T13:58:23.826Z",
        "adjustments": 20,
        "cpl_fee": 0,
        "cpa_fee": 30,
        "rev_share_fee": 5496.5585835,
        "sub_affiliate_fee": 0,
        "deposit_amount": 69.9572,
        "ftd_amount": 34.9786,
        "deposit_count": 2,
        "ftd_count": 1,
        "registrations_count": 1,
        "payment_method_id": 2,
        "payment_method_name": "Neteller",
        "auto_payment_enabled": null,
        "manager_id": 99327,
        "treshold": 0,
        "not_processed_payment_amount": 1,
        "create_date": "2024-01-16T08:59:13.062Z",
        "commissions_total": 5526.5585835,
        "balance": 5526.5585835,
        "operator_currency": "EUR",
        "user_id": 99327,
        "manager": "support@smartico",
        "manager_contacts": {
            "phone": "",
            "email": "support@smartico.ai",
            "skype": "",
            "telegram": "",
            "fb": "",
            "vk": "",
            "discord": "",
            "whatsapp": null,
            "first_name": "Priscila",
            "last_name": "C"
        }
    }
]
```

{% endcode %}

## Making the payment through the API

Example of the request with the CURL:

```bash
curl --location --request POST 'https://boapi.smartico.ai/api/af2_payments_op' \
--header 'Authorization: cc1a4c56-44de-11ed-a835-04d6e06175364b-2354' \
--header 'Content-Type: application/json' \
--data-raw '{
    "affiliate_id": 35426,
    "amount": 1,
    "send_mail_to_aff": false,
    "operator_comments": "Here are internal comments that will be NOT visible for the affiliate",
    "payment_details": "Here are public comments that will be visible for the affiliate"
}'
```

Passed parameters:

* amount - is the amount in the operator currency
* send\_mail\_to\_aff - if set to 'true', will trigger automatic mail to the affiliate that payment is made (mail template & operational campaign need to be set up in the TAP BackOffice)
* optionally can be passed 2 parameters - period\_from & period\_to as a UNIX second from the epoch, indicating the period for the payment

Example of response

```json
{
    "id": 15561,
    "payment_id": 15561,
    "amount": 1,
    "affiliate_id": 35426,
    "payment_details": "Here are public comments that will be visible for the affiliate",
    "create_by": 1,
    "create_date": "2022-11-23T13:17:08.637Z",
    "period_from": "2022-11-23T13:17:08.397Z",
    "period_to": "2022-11-23T13:17:08.397Z",
    "operator_comments": "Here are internal comments that will be NOT visible for the affiliate",
    "payment_date": "2022-11-23T13:17:08.397Z",
    "payment_status_id": 4,
    "operator_currency": "EUR",
    "affiliate_name": "mattfff",
    "payment_method_id": 0,
    "payment_method_details": {},
    "username": "gik",
    "payment_status_name": "Paid",
    "manager_id": 2342,
    "payment_name": "mattfff - 1 EUR"
}
```

## Making adjustment to affiliate's balance

Example of the request with the CURL:

```bash
curl --location --request POST 'https://boapi.smartico.ai/api/af2_adjustments_op' \
--header 'Authorization: cc1a4c56-44de-11ed-a835-04d6e06175364b-2354' \
--header 'Content-Type: application/json' \
--data '{ 
     "affiliate_id": 348678, 
     "adjustment_type_id": 5, 
     "amount": -11
}'
```

Passed parameters:

* affiliate\_id
* adjustment\_type\_id  - always use **value 5**
* amount - can be positive or negative value


# Deals management API

{% hint style="info" %}
This document describes how to manage deals for affiliates via API.
{% endhint %}

{% hint style="danger" %}
The default API URL is **<https://boapi.smartico.ai/>** but depending on your setup it could be different. Check for the exact URL in the '***Settings***' section.
{% endhint %}

## Creating new deals for affiliates

\
You can use the HTTP POST method to build deals for specified affiliate\_id.\
\
The API key to access the end-point is the same as described [here](/apis-and-configurations/reporting-api#obtaining-api-key-for-affiliate)<br>

Example of POST body in JSON:&#x20;

```typescript
curl --location 'https://boapi.smartico.ai/api/af2_deals_op' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{ 
     "affiliate_id": 64257, // required
     "deal_type_id": 6,     // required
     "deal_group_name": "CPA + REV & FTD Qualifier", //required
     "cpa_amount": 10,
     "qua_cpa_ftd": 30, 
     "rev_share_percentage": 25 
}'
```

The platform supports the following deals:&#x20;

```typescript

export enum AffDealType {
    // Pure deals
    CPL = 1,
    CPA = 2,
    RevShare_NetPL = 4,
    RevShare_NetDeposit = 8,

    // Hybrid deals
    CPL_CPA = 3,
    CPL_RevShare_NetPL = 5,
    CPA_RevShare_NetPL = 6,
    CPL_RevShare_NetDeposit = 9,
    CPA_RevShare_NetDeposit = 10,
}
```

Supported fields in POST body:

```typescript

{
    "affiliate_id": 64257,      // required
    "deal_type_id": 2,          // required, One of deal types
    "deal_group_name": "Some name of the deal", // required
    
    // parameters specific for CPA deal
    "cpa_amount": 10.5,         // required, CPA amount that will be paid for affiliate
    "qua_cpa_net_deposit": 10,  // optional, NetDeposit qualifier amount
    "qua_cpa_deposit": 20,      // optional, Deposit qualifier amount  
    "qua_cpa_ftd": 10,          // optional, FTD qualifier amount  
    "qua_cpa_volume": 100,      // optional, Volume (wagering) qualifier amount
    "qua_cpa_activity_count": 5 // optional, activities (bets) count qualifier amount

    // parameters specific for CPL deal
    "cpl_amount": 10.5,         // required, CPL amount that will be paid for affiliate
    "qua_cpl_volume": 100,      // optional, Volume (wagering) qualifier amount
    
    // parameters specific for RevShare deals (both P&L and NetDeposit based)
    "rev_share_percentage": 25, // required, % of rev share
    
    // parameters for setting the deal criteria
    "match_brand_is": [123],   // optional, if not passed, deal will be applicable for 'Any Brand'

        
}
```

For hybrid deals, you can use a combination of parameters. For example, for CPA + RevShare\_NetPL deal, the required fields will be cpa\_amount and rev\_share\_percentage.

**Example** of the call that creates a CPA + RevShare\_NetPL deal with&#x20;

* CPA amount of: 10
* Rev share percentage: 25
* CPA FTD Qualifier: 30

```bash
curl --location 'https://boapi.smartico.ai/api/af2_deals_op' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "affiliate_id": 64257,
    "deal_type_id": 6,
    "deal_group_name": "CPA + REV & FTD Qualifier",
    "cpa_amount": 10,    
    "qua_cpa_ftd": 30, 
    "rev_share_percentage": 25
}'
```

Such a deal will correspond to the following configurations made from the TAP backoffice:

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

## Set default deal for affiliate<br>

You can use the HTTP POST method to set a default deal for the affiliate.\
Example of the call:

```bash
curl --location 'https://boapi.smartico.ai/api/private-api?method=af2_MakeDealDefault' \
--header 'authorization: your-api-key'
--header 'Content-Type: application/json' \
--header 'Active_label_id: 12345' \
--data '{
    "method": "af2_MakeDealDefault",
    "params": {
        "deal_original_id": 39752, 
        "affiliate_id": "64257"
           }
        }'
```

\
\
Example of the response:

```bash
 { "errCode":0, "message":"Deal group 39752 is set to be default" }
```

## Getting a list of deals for the affiliate

You can use the HTTP GET method to get a list of all deals for the affiliate

```bash

curl --location 'https://boapi.smartico.ai/api/af2_deals_op?affiliate_id=100508' \
--header 'authorization: your-api-key'

```

You need to pass affiliate\_id; as a response, you will get a list of all deals, including the sub-deals. Example of the response

```json
[
    {
        "id": 93195,
        "affiliate_id": 100508,
        "deal_id": 93195,
        "deal_original_id": 93195,
        "deal_parent_original_id": null,
        "deal_group_name": "Default deal",
        "match_brand_ids": [
            -1
        ],
        "match_af_product_ids": [
            -1
        ],
        "match_countries": [
            "ANY"
        ],
        "match_source_ids": [],
        "match_campaign_ids": [
            -1
        ],
        "match_date_from": null,
        "match_date_till": null,
        "cpa_tiers_enabled": true,
        "cpa_tiers_structure": [
            {
                "step": 1,
                "amount": 2
            },
            {
                "step": 3,
                "amount": 4
            },
            {
                "step": 5,
                "amount": 6
            }
        ],
        "rev_share_tiers_enabled": 0,
        "rev_share_tiers_structure": [],
        "cpa_amount": 1,
        "rev_share_percentage": null,
        "cpl_amount": null,
        "qua_cpa_net_deposit": null,
        "qua_cpa_volume": null,
        "qua_cpa_activity_count": null,
        "qua_cpa_ftd": null,
        "qua_cpa_deposit": null,
        "qua_cpl_volume": null,
        "qua_rev_on_cpa_amount": null,
        "deal_type_id": 2,
        "is_default": true,
        "create_date": "2023-08-03T10:18:10.168Z",
        "close_date": null,
        "create_by": 2342,
        "is_latest": true,
        "cpl_users_count": "0",
        "cpa_users_count": "0",
        "rev_users_count": "0",
        "level_id": 1,
        "match_readable_brands": "Any brand",
        "match_readable_countries": "Any country",
        "match_readable_other": "",
        "cpa_tier_step_1": 1,
        "cpa_tier_amount_1": 2,
        "cpa_tier_step_2": 3,
        "cpa_tier_amount_2": 4,
        "cpa_tier_step_3": 5,
        "cpa_tier_amount_3": 6
    },
    {
        "id": 94509,
        "affiliate_id": 100508,
        "deal_id": 94509,
        "deal_original_id": 94509,
        "deal_parent_original_id": 93195,
        "deal_group_name": null,
        "match_brand_ids": [
            -1
        ],
        "match_af_product_ids": [
            -1
        ],
        "match_countries": [
            "AX"
        ],
        "match_source_ids": [],
        "match_campaign_ids": [
            -1
        ],
        "match_date_from": null,
        "match_date_till": null,
        "cpa_tiers_enabled": true,
        "cpa_tiers_structure": [
            {
                "step": 1,
                "amount": 2
            },
            {
                "step": 3,
                "amount": 4
            },
            {
                "step": 5,
                "amount": 6
            }
        ],
        "rev_share_tiers_enabled": 0,
        "rev_share_tiers_structure": [],
        "cpa_amount": 5,
        "rev_share_percentage": null,
        "rev_cap_amount": null,
        "cpl_amount": null,
        "qua_cpa_net_deposit": null,
        "qua_cpa_volume": null,
        "qua_cpa_activity_count": null,
        "qua_cpa_ftd": null,
        "qua_cpa_deposit": null,
        "qua_cpl_volume": null,
        "qua_rev_on_cpa_amount": null,
        "deal_type_id": 2,
        "is_default": false,
        "create_date": "2023-08-06T08:29:50.555Z",
        "close_date": null,
        "create_by": 1,
        "is_latest": true,
        "cpl_users_count": "0",
        "cpa_users_count": "0",
        "rev_users_count": "0",
        "level_id": 2,
        "match_readable_brands": "Any brand",
        "match_readable_countries": "AX",
        "match_readable_other": "",
        "cpa_tier_step_1": 1,
        "cpa_tier_amount_1": 2,
        "cpa_tier_step_2": 3,
        "cpa_tier_amount_2": 4,
        "cpa_tier_step_3": 5,
        "cpa_tier_amount_3": 6
    }
]
```

If you are interested only in the root level deals, you will need to take only deals with level\_id: 1


# More API methods

{% hint style="info" %}
This document describes how to get a list of affiliates, a list of available destination links and a list of pixel definitions, update affiliate details, build a tracking link for affiliates via API.
{% endhint %}

{% hint style="danger" %}
The default API URL is **<https://boapi.smartico.ai/>** but depending on your setup it could be different. Check for the exact URL in the '***Settings***' section.
{% endhint %}

## Working with affiliates' profiles

### Get a list of all affiliates

The HTTP GET method can be used to get a list of all affiliates in the system.

```bash

curl --location --globoff 'https://boapi.smartico.ai/api/af2_aff_op' \
--header 'authorization: your-private-api-key'

```

You can pass additional query parameters to filter the results:

```typescript
//Filter by affiliate status
    "aff_status_id": number[]; 
//Set false to skip and true to include balance calculations
    "without_money": boolean;
```

{% hint style="warning" %}
Note that this request impacts your setup performance because every time it's calculating the current balance of every affiliate. You can pass `without_money=true` in the filter to avoid the performance hit **if you don't need balance data.**
{% endhint %}

{% hint style="warning" %}
Note that API returns up to 999 records. If you have more data, you can pass "range=\[1000, 1999]" in the URL as GET parameter in order to get next 1000 records.
{% endhint %}

**Example of a filtered request:**

```bash

curl --location --globoff 'https://boapi.smartico.ai/api/af2_aff_op?filter={"aff_status_id":[2],"without_money":true}' \
--header 'authorization: your-private-api-key'

```

**Example of response:**

```jsonp
[
        {
        "id": 35425,
        "affiliate_id": 35425,
        "affiliate_name": "Robby Ron",
        "country": null,
        "company": null,
        "web_site_url": null,
        "comments": null,
        "comments_from_operator": null,
        "visibility": null,
        "aff_status_id": 2,
        "operator_id": 2354,
        "brand_ids": [333,334],
        "parent_affiliate_id": null,
        "create_date": "2022-03-10T18:32:50.573Z",
        "update_date": "2023-04-24T11:32:35.804Z",
        "create_by": 2342,
        "bo_user_id": 3423,
        "ext_affiliate_id": null,
        "payment_method_name": "Wire Transfer",
        "payment_method_id": 1,
        "payment_method_details": {
            "bank_name": "International Bank",
            "beneficary": "Somewhone",
            "swift_code": "XX123",
            "back_country": "XX",
            "account_number": "XX123-41231-55"
        },
        "payment_threshold_oper_currency": null,
        "bo_label_id": 3111,
        "label_name": "MONYY RON / 35425",
        "no_carry_over": false,
        "no_carry_over_was_set": false,
        "sub_affiliate_url": "https://aff.theaffiliateplatform.com/?paff=35425&mgr=2342",
        "same_manager_url": "https://aff.theaffiliateplatform.com/?mgr=2342",
        "aff_status_name": "Approved",
        "last_login_date": "2023-05-09T06:03:47.083Z",
        "username": "mega_affiliate",
        "bo_user_email": "monnyy@theaffiliateplatform.com",
        "avatar_image_url": null,
        "two_fa_enabled": false,
        "api_access_enabled": true,
        "first_name": "Monyy",
        "last_name": "Ron",
        "phone_number": "",
        "skype": "",
        "contact_fb": "",
        "contact_vk": "",
        "contact_telegram": "",
        "enabled_for_login": true,
        "language": "EN",
        "operator_currency": "EUR",
        "manager_id": 2342,
        "manager_username": "smr",
        "parent_affiliate_name": null,
        "commissions_total": 30769.788354,
        "balance": 23890.833624,
        "payments": 23729.22,
        "adjustments": 16850.26527,
        "sub_affiliate_fee": null,
        "sub_cpa_fee": 0,
        "sub_commission_cut_percent": 5,
        "extra_role_ids": [
            100
        ],
        "default_deal_info": {
            "deal_group_name": "CPA + REV",
            "deal_type_id": 6,
            "cpa_amount": 30,
            "rev_share_percentage": 20,
            "cpl_amount": null
        },        
    }
]
```

The field "**default\_deal\_info**" represent basic details of the latest version of the default deal for each affiliate. The **`deal_type_id`** field represents a bit mask of the deal type, as defined below

```typescript
export enum AffDealType {
    // Pure deals
    CPL = 1,
    CPA = 2,
    RevShare_NetPL = 4,
    RevShare_NetDeposit = 8,

    // Hybrid deals
    CPL_CPA = 3,
    CPL_RevShare_NetPL = 5,
    CPA_RevShare_NetPL = 6,
    CPL_RevShare_NetDeposit = 9,
    CPA_RevShare_NetDeposit = 10
}
```

The field **`extra_role_ids`** represents permissions to the additional measurements that are visible for the affiliate or access to the "Registrations report". Possible values are:

```typescript
export enum AffExtraRoles {
    RegistrationsReport = 100, // access to the "Registrations report"
    QualificationDate = 101, // Date of player's deal qualification
    RegistrationsCountry = 102, // Registration country of player, as reported by platform
    FTDDate = 103, // Date of FTD
    FTDCount = 104, // Count of FTDs 
    FTDAmount = 122, // Amount of FTDs
    NetDeposits = 105, // Net Deposit amount
    DepositsCount = 107, // Count of deposits
    QFTDCount = 113, // Count of CPA qualified players
    Withdrawals = 116, // Count of withdrawals
    ConversionRate = 117, // Deposits to Registrations, %
    DepositAmount = 118, // Amount of Deposit
    QLeadsCount = 151, // Count of CPL qualified players
    EffectiveCPA = 152, //(CPA commissions ± registration level Adjustments) / FTD count
    EffectiveCPL = 153, //(CPL commissions + registration level Adjustments) / registrations count
    AffRole_NetPnL = 165, // Net PnL Amount
    AffRole_PnL = 224, // PnL Amount
    AffBonusAmount = 232 // Bonus Amount
    AffChargebacks = 255, // Chargeback amount, if reported by platform
	  AffDeductions = 256, // Deductions amount, if reported by platform
	  AffVolumeOrBets = 266 // Volume/bet amount, as reported by platform
}
```

Possible statuses of affiliate: `aff_status_id`

```typescript
export enum AffiliateStatus {
    Pending = 1,
    Approved = 2,
    Declined = 3,
    Suspended = 4,
    ViewOnly = 5,
    Blocked = 6,
    Blocked(Data Only) = 7
}
```

### Update affiliate details

You should do a PUT API call with the ID of the Affiliate that you want to update in the URL.

You can include only fields that you want to update, e.g. example of updating just the first name of the affiliate

```bash
curl --location --request PUT 'https://boapi.smartico.ai/api/af2_aff_op/36971' \
--header 'authorization: your-api-key \
--header 'Content-Type: application/json' \
--data '{
    "first_name": "JohnB"
}'
```

{% hint style="warning" %}
In case API returns the following code:  \
\
`"You cannot change parent affiliate as soon as it was set and approved and affiliate earned commission"` , \
\
you have to also pass *'parent\_affiliate\_id'* and '*manager\_id'* in the update, with the same values as before.
{% endhint %}

Full list of supported properties

```jsonp
{
    "affiliate_name": "JohnB",
    "comments": "Comments visible and editable by the affiliate",
    "company": "Company name",
    "country": "BG",
    "web_site_url": "https://mysite.com",
    "comments_from_operator": "Comment that will be visible only for operator",
    "aff_status_id": 2, 
    // one of the statuses as listed above, AffiliateStatus
    "ext_affiliate_id": "some_id_in_external_system",
    "no_carry_over": true, 
    // to enabled/disabled NO NEGATIVE CARRY OVER
    "manager_id": 123, 
    // set the ID of the manager
    "parent_affiliate_id": 35427,
    // set the ID of the parent
    "custom_prop_155": 33, 
    // update "Custom tag" with ID 155, by setting tag with ID 33. 
    // see the IDs for your setup in the BackOffice in "Custom tags" section
    "bo_user_email": "email_of_affiliate@myaffiliatesite.com",
    "avatar_image_url": "",
    "two_fa_enabled": false,
    // enabled/disable 2FA verification
    "api_access_enabled": true,
    // enable/disable access for affiliate via API
    "extra_role_ids": 103,104,122,
    "first_name": "John",
    "last_name": "Malkovich",
    "phone_number": "123",
    "skype": "john",
    "contact_fb": "https://fb.me/123123",
    "contact_wa": "",
    "contact_vk": "",
    "contact_telegram": "",
    "contact_discord": "",    
    "language": "FR",
    // set the preferred communication language
    "payment_method_id": 3,
    "payment_method_details": {
               "skrill_email": "user@skrill.com",
    }
    "payment_threshold_oper_currency": 1000,
    // set the payment method and payment method details of the affiliate as listed below
    "brand_ids": [333],
    //associate affiliate with one or more of your brands; has simply informational purpose

}
```

Possible payment methods  (payment\_method\_id)&#x20;

```typescript
export enum AffPaymentMethodType {
    NotSpecified = 0,
    WireTransfer = 1,
    Netteller = 2,
    Skrill = 3,
    PayPal = 4,
    BitCoin = 5,
    TRC20 = 6,
    Payfix = 7,
    Papara = 8,
    PayBrokers = 9,
    PlayerAccount = 10,
    AstroPay = 11,
    USDT_ERC20 = 12,
    PIX = 13,
    Pixtopay = 14,
    PayLivre = 15,
    Pay4Fun = 16,
    YouPayCoin = 17,
    Istpay = 18,
    Pagfast = 19,
    EzzeBank = 20,
    USDCERC20 = 21,
}
```

Possible payment method details (payment\_method\_details):

```typescript
export const AffPaymentMethodDetails = {
       [AffPaymentMethodType.WireTransfer]: {
        vat: number;
        beneficiary: string;
        account_number: string;
        bank_country: string;
        bank_name: string;
        bank_branch: string;
        bank_city: string;
        swift_code: string;
        iban: string;
        aba: string;
        correspondent: string;
    };
    [AffPaymentMethodType.Netteller]: {
        netteller_vat: number;
        netteller_email: string;
        netteller_account_number: string;
    };
    [AffPaymentMethodType.PayPal]: {
        paypal_email: string;
    };
    [AffPaymentMethodType.Skrill]: {
        skrill_email: string;
    };
    [AffPaymentMethodType.BitCoin]: {
        bitcoin_address: string;
    };
    [AffPaymentMethodType.TRC20]: {
        trc20_wallet: string;
        trc20_holder_name: string;
    };
    [AffPaymentMethodType.USDT_ERC20]: {
        erc20_wallet: string;
    };
    [AffPaymentMethodType.Payfix]: {
        payfix_no: string;
        payfix_names: string;
    };
    [AffPaymentMethodType.Papara]: {
        papara_no: string;
        papara_names: string;
    };
    [AffPaymentMethodType.PayBrokers]: {
        paybrokers_cpf: string;
        paybrokers_cnpj: string;

    };
    [AffPaymentMethodType.PlayerAccount]: {
        pa_account_id: string;
        pa_email: string;
        pa_user_name: string;
    };
    [AffPaymentMethodType.AstroPay]: {
        astro_account_id: string;
        pa_email: string;
        pa_user_name: string;
    };
    [AffPaymentMethodType.PIX]: {
        pix_cpf: string;
        pix_key: string;
        pix_full_name: string;
    };
    [AffPaymentMethodType.Pixtopay]: {
        pixtopay_cpf: string;
    };
    [AffPaymentMethodType.PayLivre]: {
        paylivre_cpf_or_cnpj: string;
    };
    [AffPaymentMethodType.Pay4Fun]: {
        pay4fun_cpf: string;
    };
    [AffPaymentMethodType.YouPayCoin]: {
        youpaycoin_name: string;
        youpaycoin_surname: string;
        youpaycoin_email: string;
    };
    [AffPaymentMethodType.Istpay]: {
        istpay_cpf: string;
    };
    [AffPaymentMethodType.PagFast]: {
        pagfast_pix_cpf: string;
        pagfast_pix_full_name: string;
    };
    [AffPaymentMethodType.EzzeBank]: {
        ezzebank_cnpj: string;
        ezzebank_email: string;
    };
    [AffPaymentMethodType.USDCERC20]: {
        usdc_erc20_wallet: string;
    };
};
```

## Build a tracking link for an affiliate

The operator can use the HTTP POST method to build a tracking link for specific affilite\_id and specific destination link\_id.&#x20;

The API key is the same as described [here](https://help.theaffiliateplatform.com/apis-and-configurations/api-keys-and-url#obtaining-api-key-for-operator)

```bash
curl --location 'https://boapi.smartico.ai/api/private-api' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "method": "af2_build_link",
    "params": {
        "linkParams": {
            "link_id": 658,
            "affiliate_id": 46554,
            "source_id": null
        }
    }
}'
```

## Get available destination links

The operator can use the HTTP GET method to get a list of destination links.&#x20;

The API key is the same as described [here](https://help.theaffiliateplatform.com/apis-and-configurations/api-keys-and-url#obtaining-api-key-for-operator)

```bash
curl --location 'https://boapi.smartico.ai/api/af2_link_op' \
--header 'authorization: your-api-key' \
--data ''
```

Example of response:

```json
[
    {
        "id": 204,
        "link_id": 204,
        "enabled": true,
        "brand_id": 423,
        "link_type_id": 3,
        "link_type_name": "Home Page",
        "link_name": "Home page",
        "description": null,
        "destination_url": "https://theaffiliateplatform.com/{{_p_gamename}}?tracker={{tracker}}&aff_id={{affiliate_id}}",
        "destination_url_ab": null,
        "private_affiliate_ids": null,
        "is_public": true,
        "link_id_external": "https://go.aff.theaffiliateplatform.com/l0l6otqy?aff=XXX",
        "create_date": "2022-03-10T16:07:51.706Z",
        "update_date": "2023-06-19T09:53:48.147Z",
        "create_by": 2,
        "brand_name": "DemoBrand",
        "operator_id": 2354,
        "is_active_brand": true,
        "enable_campaigns": true,
        "enable_source_id": true,
        "link_name_and_brand": "Home page / DemoBrand",
        "asset_ids": [
            304,
            306
        ]
   }
]
```

## Manage pixel definitions (postbacks)

The operator can use the HTTP GET method to manage pixel definitions for the affiliate.

The API key is the same as described [here](https://help.theaffiliateplatform.com/apis-and-configurations/api-keys-and-url#obtaining-api-key-for-operator).

To **get a list of pixel definitions** for the specific affiliate:

```bash
curl --location 'https://boapi.smartico.ai/api/af2_pixel_definitions_op?affiliate_id=166368' \
--header 'authorization: your-api-key' \
--data ''
```

Example of response:

```jsonp
[
    {
        // unique ID of the pixel definition in the system
        "id": 2887,
        // type of the trigger
        // 1 - Lead created
        // 2 - Lead qualified
        // 3 - FTD made
        // 4 - Qualified FTD made
        "pixel_trigger_type_id": 1,
        // type of the pixel delivery
        // 1 - server-to-server HTTP call
        // 2 - Client image
        // 3 - Client iframe
        // 4 - Client JavaScript
        "pixel_type_id": 1,
        // the name of the definition
        "pixel_name": "Name of the pixel definition",
        // URL for the call back with placeholders that will be replaced
        "pixel": "https://api.casino.com/?deal_id={{deal_id}}",
        // affiliate id to whom this pixel belongs
        "affiliate_id": 166368,
        // deal ID on which this pixel will be triggered. 
        // -1 means will be triggered for all deals of affiliate
        "deal_id": -1,
         // status of pixel definition
         // 1 - active
         // 2 - inactive
        "pixel_status": 1,
    }
]
```

To **create a new pixel definition**

```bash
curl --location 'https://boapi.smartico.ai/api/af2_pixel_definitions_op' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "affiliate_id": "166368",
    "pixel_status": 1,
    "pixel_type_id": 1,
    "pixel_trigger_type_id": 1,
    "pixel": "https://api.casino.com/?deal_id={{deal_id}}",
    "pixel_name": "Name of the pixel definition2"
}'
```

To **update existing pixel definition** (pay attention that the ID of the definition should be passed in the URL, 2888 in our example)

```bash
curl --location --request PUT 'http://boapi.smartico.ai/api/af2_pixel_definitions_op/2888' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "pixel_status": 2,
    "pixel_name": "This pixel will be renamed and deactivated"
}'
```

## Manage promo codes

The operator can use the HTTP API to manage promo codes for affiliates. \
\
The API key is the same as described [here](https://help.theaffiliateplatform.com/apis-and-configurations/api-keys-and-url#obtaining-api-key-for-operator).

### Get a list of promo codes

Use the HTTP GET method to get a list of promo codes.

```bash
curl --location 'https://boapi.smartico.ai/api/af2_promo_codes_op' \
--header 'authorization: your-api-key' \
--data ''
```

You can pass optional query parameters to filter the results:

```typescript
//Search by promo code name (case-insensitive). Use `@` prefix to search by ID, e.g. `@123`
    "q": string; 
//Filter by status. `true` for active, `false` for inactive  
    "status": boolean;
```

Example of a filtered request:

```bash
curl --location 'https://boapi.smartico.ai/api/af2_promo_codes_op?status=true' \
--header 'authorization: your-api-key' \
--data ''
```

Example of response:

```json
[
    {
        // unique ID of the promo code
        "id": 150,
        "promocode_id": 150,
        // the promo code string
        "promocode": "WELCOME2026",
        // internal description (visible only for operator)
        "description_internal": "Welcome bonus for new signups",
        // public description (visible to affiliates)
        "description_public": "Get 100% bonus on first deposit",
        // operator ID
        "operator_id": 2354,
        // affiliate ID to whom this promo code belongs
        "affiliate_id": 166368,
        // affiliate name
        "affiliate_name": "AffPartner",
        // deal ID assigned to this promo code
        "deal_id": 93195,
        // deal group name
        "deal_group_name": "Default deal",
        // start date from which the promo code is valid (ISO 8601)
        "start_date": "2026-01-01T00:00:00.000Z",
        // end date until which the promo code is valid (ISO 8601), null if no expiry
        "end_date": "2026-12-31T23:59:59.000Z",
        // status of the promo code
        // true - active
        // false - inactive
        "status": true,
        // back office username of the creator
        "username": "admin",
        // creation timestamp
        "create_date": "2026-01-15T10:30:00.000Z",
        // last update timestamp
        "update_date": "2026-02-01T14:20:00.000Z"
    }
]
```

### Get a single promo code by ID

Use the HTTP GET method with the promo code ID in the URL:

```bash
curl --location 'https://boapi.smartico.ai/api/af2_promo_codes_op/150' \
--header 'authorization: your-api-key' \
--data ''
```

The response will contain a single promo code object with the same structure as described above.

### Create a new promo code

Use the HTTP POST method to create a new promo code.

```bash
curl --location 'https://boapi.smartico.ai/api/af2_promo_codes_op' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "promocode": "SUMMER2026",
    "description_internal": "Summer campaign promo code",
    "description_public": "Get 50% bonus on your deposit",
    "affiliate_id": 166368,
    "deal_id": 93195,
    "start_date": "2026-06-01T00:00:00.000Z",
    "end_date": "2026-08-31T23:59:59.000Z",
    "status": true
}'
```

Full list of request body fields below:

```
{
     "promocode": string; //The promo code string. Must be unique per operator. 
     "affiliate_id": number; // ID of the affiliate to whom this promo code belongs.
     "deal_id": number; //ID of the deal assigned to this promo code. Must be a valid deal for the specified affiliate.
     "status": boolean; // `true` for active, `false` for inactive.
     "description_internal": string; // Internal description visible only for the operator.
     "description_public": string //Public description visible to affiliate.
     "start_date": string // Start date from which the promo code is valid (ISO 8601).
     "end_date": string //End date until which the promo code is valid (ISO 8601).
}
```

\
**Important to know:**<br>

* The following fields are mandatory: "promocode", "affiliate\_id", "status", "start\_date"
* The "promocode" must be unique. If a promo code with the same name already exists, the API will return an error: `"The promocode with this name already exists. Please use a different promocode."`
* The "deal\_id" must be a valid deal for the specified "affiliate\_id" . If the deal does not belong to the affiliate, the API will return an error: `"Invalid deal for selected affiliate"`. If no "deal\_id" is passed, the deal assigned to the promocode will be the home deal of the affiliate.

### Update an existing promo code

Use the HTTP PUT method with the promo code ID in the URL.

```bash
curl --location --request PUT 'https://boapi.smartico.ai/api/af2_promo_codes_op/150' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "promocode": "SUMMER2026-UPDATED",
    "status": false,
    "end_date": "2026-07-31T23:59:59.000Z"
}'
```

You only need to include the fields you want to update. All fields from the create request are supported except `affiliate_id` and `deal_id` , which cannot be changed independently without the other (both must be provided together for re-validation).

Full list of supported properties:

```
{
     // The promo code string.
     "promocode": string; 
     // ID of the affiliate
     "affiliate_id": number;
     // ID of the deal. If provided with "affiliate_id", the deal will be validated against the affiliate.
     "deal_id": number; 
     // "true" for active, "false" for inactive.
     "status": boolean; 
     // Internal description
     "description_internal": string; 
     // Public description
     "description_public": string 
     // Start date (ISO 8601).
     "start_date": string 
     // End date (ISO 8601).
     "end_date": string 
}
```

\
Example of an API call for deactivation of promo code:<br>

```bash
curl --location --request PUT 'https://boapi.smartico.ai/api/af2_promo_codes_op/150' \
--header 'authorization: your-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "status": false
}'
```


# FAQ: Affiliation

### How to control language, assigned manager, and automatic approval of affiliates on the registration page.

Your registration page is usually located on a site like <https://aff.mysite.com>.

This site can change UI and the process of registration using the following parameters in the URL

* <https://aff.theaffiliateplatform.com/?lang=uk> - will open the registration page in the specified language
* [ ](https://aff.theaffiliateplatform.com/?lang=uk\&tc=true)[https://aff.theaffiliateplatform.com/?tc=true](https://aff.theaffiliateplatform.com/?lang=uk\&tc=true) - will open the T\&C page
* <https://aff.theaffiliateplatform.com/?paff=123>  - newly registered affiliate will be assigned as a child to affiliate with ID 123
* <https://aff.theaffiliateplatform.com/?mgr=123> - newly registered affiliate will be assigned to the manager with ID 123. Note that such affiliates will be automatically approved and assigned to the manager

You can find your manager ID in the user area on the left side of the screen

<figure><img src="/files/SFd5yxz0mD5xUmjLOKbH" alt=""><figcaption><p>Manager ID is on the left side of the screen </p></figcaption></figure>

### How to change UI of the affiliate registration page

You can provide custom CSS, colors, and background of the page in the **Settings \ Custom CSS & JS** sections. Please check the example below

```html
<style>
	body {
		background-image: url('https://static.smr.vc/2576047dbc254e7266bfc9-WheelBg, pumpkins.jpg');
		background-color: transparent !important;
		background-size: cover !important;
		color: #fff !important;
	}

	#reg_form {
		padding: 40px !important;
		background-color: #000;
	}

	form label {
		color: #fcd004 !important;
		font-weight: bold !important;
	}

	form input,
	form select,
	form textarea {
		border-color: #fcd004 !important;
		border-width: 2px !important;
		border-radius: 6px !important;
	}

	form>div>div.input-group>input,
	form>div>div.input-group>select,
	form>div>div.input-group>textarea {
		border-color: #fcd004 !important;
		border-top-right-radius: 6px !important;
		border-top-left-radius: 0px !important;
		border-bottom-right-radius: 6px !important;
		border-bottom-left-radius: 6px !important;
		border-width: 2px 2px 2px 0px !important;
	}

	form .input-group .input-group-prepend span {
		background-color: #fcd004 !important;
		border-color: #fcd004 !important;
		border-width: 2px 0px 0px 0px !important;
		border-top-left-radius: 6px !important;
		border-bottom-left-radius: 6px !important;
	}

	form button.btn-primary[type="submit"] {
		color: #fff;
		background-color: #fcd004;
		border-color: #fcd004;
	}
</style>
```

### How to change the set of required fields on the affiliate registration page

You can change a set of required fields in the **Settings \ Custom CSS & JS** section. Please check the example below

```html
<script>
$('#web_site_url').attr('required', 'true');
</script>
```

You can also make some fields optional or even hide them

```html
<script>
	$('#skype').attr('required', false);
	$('#company').attr('required', false);
	$('#web_site_url').attr('required', false);
	$('#comments').attr('required', false);
	$('#country').attr('required', false);


	$('#skype_block').css('display', 'none');
	$('#company_block').css('display', 'none');
	$('#web_site_url_block').css('display', 'none');
	$('#comments_block').css('display', 'none');
	$('#country_block').css('display', 'none');
</script>
```

### Is it possible to assign a Parent Affiliate to an already approved affiliate?

**Yes**, it is possible to assign a Parent Affiliate to an already approved affiliate, regardless of whether they have generated commission yet. The sub-affiliate commission for the parent affiliate will start to be generated from that point onward, considering new financial activities of both old and new players of the sub-affiliate.

### Why was a player registered via an affiliate link, mapped correctly to the affiliate but not assigned to a deal?

There could be various reasons for this issue:

1. **Mismatch between Player and Deal Configuration**:
   * Example: The player registered via a link for campaign X, but the affiliate's deal(s) do not include campaign X in the additional deal criteria (e.g., only players from campaigns Y and Z can enter the affiliate's deal(s)).
   * Example: The player registered for brand A, but the affiliate's deal(s) have brand B in the additional deal criteria (e.g., only players from brand B can enter the affiliate's deal(s)).
2. **Player’s Registration Date Predates Deal Creation Date**:
   * The player's registration date might be before the deal creation date, causing the player not to be assigned to the deal.

### Does TAP receive a clickid variable in the AFP parameter?

Yes, TAP can receive a clickid variable in the AFP parameter.

* **Clickid Value**: The clickid is a value sent by the affiliate and can be included in any parameter, including {{afp}}.
* **Data Storage**: Clickid values are not stored in BI (Business Intelligence). However, AFPs are stored in BI and can be used to segment meaningful data.

### Why was a player not assigned to an affiliate even though they registered using a link with an afp parameter?

In this case, the player is not assigned to the correct affiliate because afp values are not registration facts but visit facts.

* **Afp Values**: Afp values are associated with visits, not registrations. Therefore, the presence of an afp parameter in the registration link does not ensure the player will be correctly assigned to the affiliate based on that parameter.

### Why can't an affiliate see their 'invitation link' to refer sub-affiliates?

An affiliate will only see their invitation link if they have a sub-affiliate deal configured by the operator.

* **Sub-Affiliate Deal Configuration**: The invitation link is exposed to an affiliate only if there is a sub-affiliate deal configured by the operator.
* **Location of Invitation Link**: Affiliates can find their invitation links for expanding their sub-affiliate network in their profile under "Affiliate Network".

<figure><img src="https://lh7-eu.googleusercontent.com/docsz/AD_4nXfKjygqvHTuWrFYyfefYry03NM-YQ7pjm6ovDntezeuSKK9JJdnHmJFn2FS4_wtK8kFVmATQYNn0bg2KDH_FVOvMJTonSfWL_xeTf6pSwYq97ildtdrLw1cMXM-JCkJNPqvfxZrY4uZ_IoCNITxC2hLL7oU?key=ptPe0el_YCDG_JyeumIqBA" alt=""><figcaption></figcaption></figure>

### Why don't I see all sub-affiliates related to a parent in the Media Report?

Grouping by the 'Child Affiliate' dimension in the Media Report will show only the sub-affiliates who have generated commission for the parent affiliate.

* **Commission-Based Visibility**: Sub-affiliates who have not yet contributed to the parent affiliate’s commission will not be shown when the report is built this way.

### Why is grouping by registrations/players in the Media Report showing all visits under 'Empty'?

All clicks are shown under “Empty” when grouping by player (registration ID, external ID, username) because, at the time of recording the visit, there is no registration/player ID yet.

* **Timing of Data Recording**: The visit is recorded before a registration/player ID is assigned, so these visits are initially grouped under "Empty."
* **Visit Information**: The visit information is exposed in the player’s profile, including the visit date.

### Why am I receiving error response 400 when testing pixel firing?

When testing the pixels firing, a 400 error response can occur due to the following reasons:

* **Dynamic Parameters**: Pixel configuration usually includes dynamic parameters, such as {{afp}}. When testing with the Test Pixel button, the server expects these parameters to be populated.
* **Missing Values**: If no values are populated for these dynamic parameters during testing, it is possible to receive the error response 400.

**Solution**: You can test pixel firing more effectively by reporting test registrations, FTDs, etc., to us so a real pixel will be fired.


