{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"a234ba01-2c09-4711-a83d-7f57c03a079a","name":"iGsuite Manager Documentation","description":"## **ℹ️ Introduction**\n\n> This document will guide you through the integration of both the **BI** & **Affiliate Platform** of **iGsuite**. These are the parties we have identified to take part in this process: \n  \n\n- The **Operator**: This is the Client who will use the software to manage their Brands\n    \n- The **iGaming Platform**: This is the Platform under which the Operator Brand is built\n    \n- **iGsuite**: Us, who manage the Software of the **Affiliate Platform** and **BI**\n    \n\n## **🧬 1. What is iGsuite?**\n\n**iGsuite** combines two products in one **\\- Affiliate Platform** and **BI:**\n\n- **Affiliate Platform -** built for the iGaming industry. Its purpose is to enable Affiliate Marketing for the operators allowing them to build, manage and scale their partners to ensure sustainable growth. The software itself provides the following key functionality:\n    \n    - Registration and management of affiliates\n        \n    - Allow Affiliates to access all sorts of creatives\n        \n    - Tracking affiliate customers\n        \n    - Collecting and visualising data about customers\n        \n    - Calculates affiliates' profit based on customer activities\n        \n    - Monitor and manage affiliate portfolio and payments\n        \n- **Newton** - the **BI**, tailored for the iGaming industry is the only BI built to support end to end the customer journey, cost and P&L of the company. Its main purpose is to:\n    \n    - Automate all reports\n        \n    - Provide ready Analysis and insights of the business\n        \n    - Update all data in real-time\n        \n\n## **📋 2. Integration Flow**\n\nBelow you will find described the exact order of actions that should take place in order to get iGsuite products live for you as fast as possible.\n\n1. **iGsuite** should initiate the integration with the relevant parties\n    \n2. The **Operator** has to provide iGsuite with their specifications towards the Affiliate Platform setup.\n    \n3. The **iGaming Platform** should start to collect and return iGsuite tokens.\n    \n4. The **iGaming Platform** should complete the File Integration:\n    \n    1. Registration File\n        \n    2. Activity File\n        \n5. **iGsuite** will handle full test on the Affiliate Platform end to end.\n    \n6. The **Operator** should state the launch date.\n    \n\n## **🚀 3. Get Started - Operator Requirements**\n\nIn order to configure iGsuite, the **Operator** should provide some key preferences for the platform, a questionnaire will be provided to the client later on.\n\nIn this section, we also explain the necessary server configuration to have the platform under the Operator's domain.\n\n**Note! Everything under point 3, is a blocker for the next steps of the integration process!**\n\n| Main Participants: | **The Operator** |\n| --- | --- |\n\n### **3.1 Platform Preferences**\n\nThe **Operator** should provide the following in the Integration Ticket:\n\n1. **Branding**:\n    \n    1. Affiliate Platform Official name\n        \n    2. Domain name under which you will operate the Affiliate Platform\n        \n    3. Logo\n        \n2. **Platform Preferences & Access**:\n    \n    1. Timezone\n        \n    2. Currency\n        \n    3. Type of integration: (API/SFTP)\n        \n    4. Data transfer option: (Json, CSV, etc)\n        \n    5. Frequency: (1h, 6h, 24h, etc)\n        \n    6. Email under which to sign the initial Admin Account\n        \n    7. Email under which to sign the data Integration Account\n        \n    8. Email used for our system mailers (Password reset, Confirm Account Registration, Affiliate Account approval, etc.)\n        \n\n### **3.2 Operator Domain Server Setup**\n\nThe Operator should provide the domain under which they would like the platform to be made available. Our integration team will provide the Operator with the necessary details so they can configure the DNS record on their domain provider.\n\n## **🔐 4. Authentication**\n\nEvery request to a `/workspaces/api/...` endpoint must include the bearer token in the `Authorization` header:\n\n`Authorization: Bearer YOUR_TOKEN`\n\nThere are two ways to obtain a token.\n\n### **4.1 Obtaining a token via the report-book UI (Recommended)**\n\nThis produces a **long-lived api token** that does not expire and does not interfere with anyone's active app session. It is the right choice for production integrations.\n\nStep by step:\n\n1. Open the report-book web application in your browser and **log in** as the integration account (the email you provided as the _Data Integration Account_ in section 3.1).\n    \n2. If 2-Factor Authentication is enabled on this account, complete the 2FA challenge.\n    \n3. From the main navigation, open **Tools**.\n    \n4. Open the **Api Tokens** tab.\n    \n5. Click the **Generate** button. A modal will appear with the plaintext token.\n    \n6. **Copy the token immediately and store it somewhere safe** (e.g. your secrets manager). The token is shown **only once** — there is no way to retrieve it again later.\n    \n7. Close the modal. The Api Tokens tab will now show an **Active** state with the creation date.\n    \n\nSend the token as the value of the `Authorization` header (formatted as `Bearer YOUR_TOKEN`) on any  \n`/workspaces/api/...` request. That's it — you're authenticated.\n\n#### Token characteristics\n\n- **No expiration.** Valid until you explicitly revoke or re-generate it.\n    \n- **Survives deploys.** Restarts and deploys of the platform do not invalidate it.\n    \n- **Independent of UI sessions.** Logging in or out of the app does not affect the token, and creating the token does not log anyone out.\n    \n- **Acts as the user.** Requests authenticated with this token carry the integration account's full permissions — treat the token like a password.\n    \n- **One active api token per user at a time.** Re-generating creates a new one and invalidates the old one.\n    \n- **Revocable anytime** via the same Tools → Api Tokens screen, or programmatically via the `Revoke Api Token` request in the AUTH folder.\n    \n\nWe strongly recommend **rotating** the token periodically to limit blast radius in the event of a leak.\n\n### **4.2 Obtaining a token via the report-book API**\n\n> **Not recommended for production integrations.** Use 4.1 unless you have a specific reason not to. \n  \n\nPartners can also authenticate by calling `POST /workspaces/api/login` with email and password and using the returned bearer token directly. See the `Login` request in the AUTH folder for full details.\n\n#### Why this is not recommended\n\n- **Destroys active app sessions.** Calling `POST /login` invalidates the user's existing session token — if the same user is currently signed in to the report-book UI, they will be **signed out**.\n    \n- **Token expires after 7 days.** You will need to re-login periodically. Each re-login produces a new token and (again) signs the user out of the app.\n    \n- **Only one active session token per user at a time.** Parallel integrations under the same user account will stomp on each other.\n    \n\nThe api token from section 4.1 has none of these downsides.\n\n## **🌐 5. Customer Tracking**\n\nAfter the Affiliate Platform is set, iGsuite will be able to generate tracking links that will be used to track the customers of the affiliates. At this point, the **iGaming Platform** should proceed with the integration process.\n\n| Main Participants: | **The iGaming Platform** |\n| --- | --- |\n\n### **5.1 How does iGsuite track the customers?**\n\nEvery Affiliate who has signed in the Affiliate Platform will have a unique tracking link. The Affiliate uses this link to refer the customers towards the Operator Brand. The customer journey is as follows:\n\n1. Customer clicks on the affiliate link\n    \n2. iGsuite tracking link redirects the customer to the given Landing Page by the Operator\n    \n3. A unique token is generated upon the redirect.\n    \n    1. This token is unique for every click\n        \n    2. Through this token, we track the Customers\n        \n\n### **5.2 About The Customer Token**\n\nThe customer token is generated by iGsuite and is unique for every single customer! The customer token is generated when the customer clicks on any of the Affiliate Platform tracking links.\n\n- _Example of a Tracking Link:_ [<b>www.Affiliate-Platform-Domain.com/api/tracking-links/record?trackingLinkId=1&amp;affiliateId=1<br></b>](http://www.affiliate-platform-domain.com/api/tracking-links/record?trackingLinkId=1&affiliateId=1)\n    \n- _Example of where the Tracking Link will Redirect:_ [<b>www.Operator-Brand.com/signup?15bedea716ee7a35279520b61aa3d2a5</b>](http://www.operator-brand.com/signup?15bedea716ee7a35279520b61aa3d2a5)\n    \n    - The Token starts after the “?”\n        \n- _Example of the Customer Token_**:**`15bedea716ee7a35279520b61aa3d2a5`\n    \n\n### **5.3 Token Requirements from the iGaming Operator**\n\n1. The iGaming Platform should ensure the following:\n    \n2. Requirements from the iGaming Operator:\n    \n    1. To store the customer token of the customer upon successful Registration\n        \n    2. To return the token of the customer within the Registration File\n        \n3. Customer Token Specifications:\n    \n    1. The token itself contains valuable information about the customer & the Affiliate, such as:\n        \n\n| **Parameter** | **Description** |\n| --- | --- |\n| **affiliateId** | **iGsuite ID of the affiliate this customer belongs to** |\n| **username** | **The username of the affiliate** |\n| **ipAddress** | **The IP Address that the customer accessed the landing page from** |\n| **referralLink** | **The page the customer landed on after visiting the tracking link (nullable)** |\n| **externalAffiliateClickId** | **The external click identifier the affiliate inserts through iGsuite when forming the tracking link** |\n| **trafficSource** | **The type of traffic that the customer came from based on the type selected for the affiliate (Example: \"SEO\")** |\n| **trackingLinkId** | **iGsuite ID of the tracking link this customer came from** |\n| **brandId** | **iGsuite ID of the brand the tracking link points to** |\n| **brandName** | **Display name of the brand the tracking link points to** |\n| **campaignId** | **iGsuite ID of the campaign associated with the click (optional — present only when the affiliate set a campaign on the tracking link)** |\n| **campaignName** | **Display name of the campaign (optional — present only when campaignId is present)** |\n\n- The iGaming Platform may decode the token to collect and store the provided information in the previous point.\n    \n- The token is generated upon a click on the tracking links and it’s unique for each and every click.\n    \n\n### **5.4 How The iGaming Platform Can Decode the Customer Token**\n\nThe iGaming Platform can decode the Customer Token in order to collect the embedded information for the customer via an API request.\n\n- **You can find more information within the** [Tracking](#5ddce0c7-c486-4ebc-8fb5-8129ad6326d3) **section of the documentation.**\n    \n\n## **🤝 6. Data integration**\n\nThe integration is achieved through HTTPS or SFTP where we expect to receive consistently the given set of files in the agreed format.\n\n| Main Participants: | **The iGaming Platform** |\n| --- | --- |\n\n### **6.1 Minimum Required Data & Format**\n\nIn order to ensure stable and consistent data flow without interruption, iGsuite requires that The iGaming Platform respects the following basic **requirements**:\n\n1. The IGaming Platform will always provide two files with a different set of data:\n    \n    1. Registration File (see [Import Customers](https://igsuite.postman.co/workspace/018a3f86-2f6c-447d-bf30-e224373f95f9/request/28572506-515b2251-88b6-4007-bd56-68044b9ccc54?action=share&source=copy-link&creator=17749899&ctx=documentation))\n        \n    2. Activity File (see [Import Activity](https://igsuite.postman.co/workspace/018a3f86-2f6c-447d-bf30-e224373f95f9/request/28572506-799ceec7-e632-4e3b-a8e2-e733fbe2b9c1?action=share&source=copy-link&creator=17749899&ctx=documentation))\n        \n2. The iGaming Platform should always respect the data Format requirements for every column\n    \n3. Each column should have a single header only. To make the integration easier, the exact header names can be discussed and changed prior to beginning the process.\n    \n\n**Note! All the fields in the CSV, JSON files and Body contents are subject to agreement between the two parties before beginning the daily integration process.**\n\n### **6.2 Sending data to iGsuite**\n\n#### **SFTP**\n\nIf you choose to proceed with the SFTP integration approach, our team will grant you server access and dedicated credentials for your iGsuite platform. To complete the process, simply upload two files - registrations.csv and activities.csv - into the files directory at the agreed times. Once uploaded, our team will handle the rest, ensuring that your data is seamlessly available in your iGsuite platform.\n\n> Note: SFTP file uploads are not exercised in this collection. If you choose SFTP, the integration is arranged with our team outside Postman. \n  \n\n#### **HTTPS**\n\nData integration is achieved via API integration with your iGsuite instance. This method offers a more streamlined and automated approach and reduces the risk of file upload failures.\n\nThe API integration with iGsuite involves two separate requests for the customer registration and activity files, respectively. These requests can be made using the example requests provided below. The baseURL corresponds to the URL of the provided iGsuite instance, which will be communicated to you separately.\n\n#### **Sending Registration File**\n\nTo integrate data via API, a POST request is used to send the CSV file. The registration CSV file should adhere to the format described in [Import Customers](https://igsuite.postman.co/workspace/018a3f86-2f6c-447d-bf30-e224373f95f9/request/28572506-515b2251-88b6-4007-bd56-68044b9ccc54?action=share&source=copy-link&creator=17749899&ctx=documentation).\n\n#### **Sending Activity File**\n\nTo integrate data via API, a POST request is used to send the CSV file. The activities CSV file should adhere to the format described in [Import Activity](https://igsuite.postman.co/workspace/018a3f86-2f6c-447d-bf30-e224373f95f9/request/28572506-799ceec7-e632-4e3b-a8e2-e733fbe2b9c1?action=share&source=copy-link&creator=17749899&ctx=documentation).\n\n⚠️ Note: Only customers who are affiliated with our system should be sent to us. Any customer record without an assigned affiliate or token must not be included in the import files. Submitting unregistered or unaffiliated customers will result in the files being rejected.\n\n### 6.3 Import Frequency\n\nThe frequency of data imports is fully customizable, depending on your integration method:\n\n- **API Integration:** If you're sending data via direct API, you may import data **at any preferred interval**—daily, hourly, or even in real-time. However, it's important to ensure a 5-min delay between the customer registration import and the corresponding activity import. This allows the system to process and calculate the relevant metrics accurately.\n    \n- **SFTP Integration:** If you choose to integrate via SFTP, please inform our team of your preferred import schedule during the initial integration setup. This enables us to configure the system accordingly and ensure timely and accurate data processing.\n    \n\n> If the frequency of the import is Hourly or less, we insist on using overwrite method over merge.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"28572506","team":2583102,"collectionId":"a234ba01-2c09-4711-a83d-7f57c03a079a","publishedId":"2sA3s7k9k4","public":true,"publicUrl":"https://api-docs.igsuite.com","privateUrl":"https://go.postman.co/documentation/28572506-a234ba01-2c09-4711-a83d-7f57c03a079a","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"2B77FF"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"dark","themes":[{"name":"dark","logo":"https://content.pstmn.io/a96ce37c-3b62-45c0-9132-6079a7cd720a/aUdzLVNob3QucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"2B77FF"}},{"name":"light","logo":"https://content.pstmn.io/05ec525e-c399-437f-a441-21292b7cd9d5/bG9nby1wbmcucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"2B77FF"}}]}},"version":"8.10.1","publishDate":"2025-01-09T11:38:33.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/05ec525e-c399-437f-a441-21292b7cd9d5/bG9nby1wbmcucG5n","logoDark":"https://content.pstmn.io/a96ce37c-3b62-45c0-9132-6079a7cd720a/aUdzLVNob3QucG5n"}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/c61fd3fec0a1aad03d83314257450b8b519c4d1d7303d990dc3a76ac8536cc65","favicon":"https://igsuite.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://api-docs.igsuite.com/view/metadata/2sA3s7k9k4"}