Getting Started

Welcome!

The FT CRM system runs entirely off a real-time data feed.
When Registrations and Logins happen in your system, these events need to be published to the integration platform so that you can trigger activities and actions in real-time together with keeping the relevant segmentation model up to date.

The real-time messages are slim and only contains the bare minimum information needed, FT CRM will do lookups on endpoints provided by the Operator to fetch relevant data about the user.

Integration Steps

Basic integration will give sufficient start for most Operators to go live. This includes ability to trigger activities in real time and build initial player life cycles based on deposit patterns and behaviours.

Step Item Description
1 Authentication and Headers The API endpoint provided by the Operator must be protected with authentication. We support X-API key header, OAuth (client_credentials) and basic authentication.
2 Provide GetUserDetails Endpoint API end point to retrieve user details from Operator to keep FT CRM database up to date.
3 Provide GetConsents Endpoint API end point to retrieve marketing communication preferences from Operator to keep FT CRM database up to date.
4 Provide GetBlocks Endpoint API end point to retrieve user blocks and exclusions from Operator to keep FT CRM database up to date.
5 Publish Registrations Publish message in real time when there is a new registration
6 Publish Logins Publish message in real time when there is a login
7 Publish Payments Publish message on deposits and withdrawals

Real Time Events

Any Real Time event should ideally be published to FT CRM Integration API within 1 second of the event taking place in platform. Failure to comply with this can cause poor customer experience.

If the API is not responding with 200 (OK), client need to ensure that the event is retried until successful response.

Endpoints Needed From Operator

Authentication and Headers

The API endpoint must be protected with authentication. We support X-API key header, OAuth (client_credentials) and basic authentication.

GET /userdetails/:userid

Operator to provide FAST TRACK with the UserDetails endpoint to fetch user data at different stages of the life cycle. FT CRM will hit this endpoint when there are a new Registration, Login, and User Update, but it can also take place if we have a data sync issue and we need to re-sync user details.

The method must not be cached.

Response:

{
  "address": "Ratatouille avenue, 34B",
  "birth_date": "2015-03-02",
  "city": "Paris",
  "country": "MT",
  "currency": "USD",
  "email": "[email protected]",
  "first_name": "Tony",
  "is_blocked": false,
  "is_excluded": false,
  "language": "en",
  "last_name": "Carrot",
  "mobile": "2143567",
  "mobile_prefix": "256",
  "origin": "sub.example.com",
  "postal_code": "TTS52",
  "roles": ["VIP", "TEST_USER"],
  "sex": "Female",
  "title": "Dr",
  "user_id": "7865312321",
  "username": "PirateTony34",
  "verified_at": "2015-03-02T8:27:58.721607Z",
  "registration_code": "ABC123",
  "registration_date": "2015-03-02T8:27:58.721607Z",
  "affiliate_reference": "AFF_1234A_UK",
  "market": "en"
  "segmentation": {
    "vip_level": 15,
    "special_segmentation": "3D"
  }
}	

Everything under the "segmentation" property is dynamic which means you can send anything with a "key/value". Please note that you will need to contact your account manager to make sure the fields you send through are being mapped properly.

Key Type Required? Example Values Description
address string Yes ““, “Ratatouille avenue, 34B” Player Address
birth_date string Yes ““, "1992-03-02" Player Birth Date
city string Yes ““, “London” City
country string Yes ““, “United Kingdom” Country of Registration
currency string Yes ““, “GBP” Currency
email string Yes ““, “[email protected] Email Address
first_name string Yes ““, “Name” First Name
is_blocked boolean Yes true/false If the player is blocked
is_excluded boolean Yes true/false If the player is excluded
language string Yes ““, “en” Language Code
last_name string Yes ““, “Lastname” Last Name
mobile string Yes ““, “123456” Mobile Number
mobile_prefix string Yes ““, “+46” Mobile Prefix
origin string Yes ““, “sub.example.com” Origin of event
postal_code string Yes ““, “12345FT” Postal Code
roles array Yes [], ["VIP", "TEST_USER”] []string
sex string Yes ““, “Male” Player Sex
title string Yes ““, “Mr” Player Title
user_id string Yes ““, “1234567”, “a123b456” Player Id
username string Yes ““, “PirateTony34” Username
verified_at string No ““, “2015-03-02T8:27:58Z” e.g. Date of player activating account or when KYC is completed
registration_code string Yes ““, “Exclusive” Registration Code
registration_date string No ““, “2015-03-02T8:27:58Z” Date of Registration
affiliate_reference string Yes ““, “AFF_12345” Affiliate Reference
market string Yes ““, “gb” Market
segmentation key/value No {}, { "vip_level": 15, "special_segmentation": "3D" } Custom Segmentation

GET /userconsents/:userid

Operator to provide FAST TRACK with the UserConsents endpoint to fetch user consents data at relevant times in the user lifecycle to ensure that the Operator comply with relevant data privacy directives and laws.
FT CRM will fetch up to date consents on Registration, Login and User Update, and can also update consents in the case of unsubscriptions.

Response:

{
  "consents": [
    {
      "opted_in": true,
      "type": "Email"
    },
    {
      "opted_in": true,
      "type": "SMS"
    },
    {
      "opted_in": false,
      "type": "Telephone"
    },
    {
      "opted_in": true,
      "type": "PostMail"
    },
    {
      "opted_in": true,
      "type": "SiteNotification"
    },
    {
      "opted_in": true,
      "type": "PushNotification"
    }
  ]
}

POST /userconsents/:userid

Operator to provide FAST TRACK with this UpdateUserConsents endpoint to update user consents at relevant times in the user lifecycle to ensure Operator comply with relevant data privacy directive and laws.
FT CRM will provide an Unsubscribe page that will be linked from SMS and Emails, when a User unsubscribes, FT CRM must also update the Operator platform setting.

Request:

{
  "consents": [
    {
      "opted_in": true,
      "type": "Email"
    },
    {
      "opted_in": true,
      "type": "SMS"
    },
    {
      "opted_in": false,
      "type": "Telephone"
    },
    {
      "opted_in": true,
      "type": "PostMail"
    },
    {
      "opted_in": true,
      "type": "SiteNotification"
    },
    {
      "opted_in": true,
      "type": "PushNotification"
    }
  ]
}

Response:

OK 200
ERROR 400/500

GET /userblocks/:userid

Operator to provide FAST TRACK with the UserBlocks endpoint to fetch user blocks data. FT CRM will fetch up to date blocks on Registration, Login and User Update, and can also update blocks.

Notes:

  • Excluded is normally used for self-exclusions/responsible gambling blocks
  • Blocked is normally used for blocks that are not related to self-exclusions/responsible gambling
  • In case the Operator only uses 1 type of block, you can use one and leave the other as false

Response:

{
    "blocks": [
        {
            "active": true,
            "type": "Excluded",
            "note": "Exclusion reason"
        },
        {
            "active": false,
            "type": "Blocked",
            "note": "Block reason"
        }
    ]
}

POST /bonus/credit

Operator to provide FAST TRACK with the Credit Bonus endpoint to ensure FT CRM can automate the bonus crediting.

This should immediately activate or make the player eligible for the bonus. This depends on how the Operator are handling bonus interactions with players.

Notes:

  • e.g. If the player needs to opt-in on the site for the bonus, this endpoint should make the player eligible to opt-in. The rest of the logic should be handled by the Operator
  • New fields can be added to be passed to the Operator (e.g. validity_amount) from the FT CRM.

Request:

{
 "user_id": "123abc",
 "bonus_code": "xyz"
}

Response:

OK 200
ERROR 400/500

POST /bonus/credit/funds

Operator to provide FAST TRACK with Credit Bonus Funds endpoint to ensure FT CRM can automate the crediting of funds.

This should add funds to the user wallet.

Request:

{
 "user_id": "123abc",
 "bonus_code": "xyz",
 "amount":  10.0,
 "currency": "USD"
}

Response

OK 200
ERROR 400/500

Real Time Events You Need To Send

The below events must be sent on the FT CRM Integration API, swagger documentation with more exact details will be provided once your staging environment is provided.

POST /v2/integration/user

This message needs to be published upon registration. Try to push it as close as possible to the registration taking place in the platform for the best experience. When we receive the message on the integration platform, it will trigger user update fetching user details from Operator API.

Request

{
  "user_id": "7865312321",
  "url_referer": "https://www.example.com",
  "note": "Any note",
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
  "ip_address": "1.1.1.1",
  "timestamp": "2015-03-02T8:27:58.721607Z",
  "origin": "sub.example.com"
}	

Required fields:

  • user_id
  • timestamp

POST /v2/integration/login

This message needs to be published whenever user makes a login. Try to push it as close as possible to the login taking place in the platform for best experience. When we receive the message on the integration platform, it will trigger an user update to make sure details are up to date.

Request

{
  "user_id": "7865312321",
  "is_impersonated": true,
  "ip_address": "192.0.2.1",
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
  "timestamp": "2015-03-02T8:27:58.721607Z",
  "origin": "sub.example.com"
}

Required fields:

  • user_id
  • timestamp

PUT /v2/integration/user

Hit this endpoint whenever there is an update to the user on your side this includes but is not limited to,

  • If user has been blocked & unblocked
  • If any of the user consents has been updated
  • If user profile / contact details has been updated

Request

{
  "user_id": "7865312321",
  "timestamp": "2015-03-02T8:27:58.721607Z",
  "origin": "sub.example.com"
}	

Required fields:

  • user_id
  • timestamp

PUT /v2/integration/user/consents

This endpoint updates consents for the specified user.

Request

{
  "user_id": "7865312321",
  "timestamp": "2015-03-02T8:27:58.721607Z",
  "origin": "sub.example.com"
}	

Required fields:

  • user_id
  • timestamp

PUT /v2/integration/user/blocks

This endpoint updates blocks for the specified user.

Request

{
  "user_id": "7865312321",
  "timestamp": "2015-03-02T8:27:58.721607Z",
  "origin": "sub.example.com"
}	

Required fields:

  • user_id
  • timestamp

POST /v1/integration/payment

  • This endpoint will let you trigger based on deposits & withdrawals.
  • These events contribute to the segmentation model for any payment activity
    e.g. Deposit Count, Last Deposit Date, Average Deposit Amount.
  • You can publish this message both when the payment has been initiated and when it has been completed, the more statuses provided, the better.
  • The bare minimum should be to send events of approved deposits.

Notes:

  • exchange_rate - In case the currency of the event is not Base Currency, exchange_rate needs to be sent to convert the amount back to the Base Currency.
    This will make segmentation correct in a single currency in case multiple are used.

  • status - Approved, Requested, Rejected & Rollback is supported.

Request

{
  "amount": 32.76,
  "bonus_code": "CHRISTMAS2018",
  "currency": "EUR",
  "deposit_count": 32,
  "exchange_rate": 0.1,
  "fee_amount": 2.34,
  "note": "string",
  "origin": "sub.example.com",
  "payment_id": "23541",
  "status": "Approved",
  "timestamp": "2015-03-02T8:27:58.721607Z"
  "type": "Debit",
  "user_id": "7865312321",
  "vendor_id": "562",
  "vendor_name": "Skrill",
  "withdraw_count": 7
}
Key Type Required? Accepted Values Description
amount number Yes N/A Amount
bonus_code string No N/A Bonus Code
currency string Yes N/A Transactions currency
deposit_count integer No N/A Users deposit count
exchange_rate number Yes e.g. 0.1 The exchange rate at the timestamp
fee_amount number No N/A Amount of fee
note string No e.g. insufficient_funds N/A
origin string Yes e.g. www.brand.com N/A
payment_id string No N/A Platform Id of the payment
status string Yes Approved, Requested, Rejected, Rollback Status of the event
timestamp string Yes Format: RFC3339
2015-03-02T8:27:58.10Z
Timestamp
type string Yes Credit, Debit Payment Type
user_id string Yes N/A User Id
vendor_id string Yes N/A Platform Id of the vendor
vendor_name string No N/A Platform name of the vendor
withdraw_count integer No N/A Users withdrawal count