Introduction
The Kore API is a modern REST JSON API designed to be easily access the resource of the casino.
There are two major use cases:
Accessed through JavaScript in a web browser to provide the facility to design custom menus and tournament widgets. The API can also integrate with third party game providers.
Accessed from a trusted computer to provide access to user events and activity summaries for marketing purposes.
All Endpoints
Authentication
POST ~/v3/api/auth/brand_public_credentials/token
- Grant Type:
brand_public_credentials
- Obtain a
brand_public_credentials
token - See documentation.
POST ~/v3/api/auth/player_credentials/token
- Grant Type:
player_credentials
- Obtain a
player_credentials
token - See documentation.
POST ~/v3/api/auth/player_credentials/token/mutate
- Grant Type:
player_credentials
- Obtain a new
player_credentials
token based on a previously obtained token. - This endpoint is used to change the
locale
orplay_mode
- See documentation.
DELETE ~/v3/api/auth/player_credentials
- Grant Type:
player_credentials
- Destroy player session and log out.
- See documentation.
POST ~/v3/api/auth/player_credentials/token/activate
- Grant Type:
brand_credentials
- Obtain a new
player_credentials
token based on a an activation code. - See documentation.
POST ~/v3/api/auth/{grant_type}/token/mutate
- Grant Type:
player_credentials
- Obtain a privileged authentication token, suitable for Server to Server communication.
- See documentation.
GET ~/v3/api/auth/player_credentials
- Grant Type:
player_credentials
- Check whether a CAPTCHA token is required to log in or not
- See documentation
GET ~/v3/pages/login/offline_signon?locale={locale}&mode={mode}&brandGroup={brand_group}
- Grant Type:
offline_signon
- Web page used to obtain
offline_signon
tokens to be used in Mobile Apps - See documentation
POST ~/v3/api/auth/offline_signon/token
- Grant Type:
offline_signon
- API endpoint to refresh
offline_signon
tokens used in Mobile Apps - See documentation
Users
GET ~/v3/api/users
- Grant Type:
brand_public_credentials
orplayer_credentials
- Obtain the registration link for new users.
- See documentation.
POST ~/v3/api/users
- Grant Type:
brand_public_credentials
orplayer_credentials
- Create new player account and automatically sign in if possible.
- See documentation.
POST ~/v3/api/users/emailcheck
- Grant Type:
brand_public_credentials
orplayer_credentials
- Check if an email address is available for registration
- See documentation.
GET ~/v3/api/users/{userid}
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/auth/token
response. - Obtain information about user currently logged in, such as balance or links to user profile pages.
- See documentation.
GET ~/v3/api/users/{userid}/stats
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/users/{userid}
response. - Obtain information about last played games, tournaments and competitions
- See documentation.
GET ~/v3/api/users/{userid}/player_day
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/auth/token
response. - Endpoint to retrieve statistics about deposits and bets in USD since a specified date.
- See documentation.
GET ~/v3/api/users/{userid}/email_status
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/users/{userid}
response. - Obtain information about email delivery to the player.
- See documentation.
GET ~/v3/api/users/{userid}/tags?categories={cat1},{cat2}
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/users/{userid}
response. - Mandatory query URL parameter: comma separated list of tag categories.
- Obtain the list of tags associated to the player.
- See documentation.
GET ~/v3/api/users/{userid}/custom
- Grant Type:
player_credentials
- Endpoint URL retrieved from
~/v3/api/users/{userid}
response. - Retrieve custom information about the player.
- The information is controlled by an operator controlled stored procedure in the database.
- See documentation.
PUT ~/v3/api/users/{userId}/password
- Grant Type:
player_change_password
- Change password of a player.
- See documentation.
PATCH ~/v3/api/users//password
- Grant Type:
extra_player_info
- Amend user details; used to capture address at login/registration.
- See documentation.
Games
GET ~/v3/api/games
- Grant Type:
brand_public_credentials
orplayer_credentials
. - Obtain list of games. Optionally filter for
platform
. - If
player_credentials
this endpoint also return launchable links to games. - See documentation.
GET ~/v3/api/games
- Grant Type:
brand_public_credentials
orplayer_credentials
- Obtain list of games.
- If
player_credentials
this endpoint also return launchable links to games. - See documentation.
GET ~/v3/api/games/{game_id}
- Grant Type:
brand_public_credentials
orplayer_credentials
- Obtain details about a particular game, which are not returned by
~/v3/api/games
. - If
player_credentials
this endpoint also return launchable links to games. - See documentation.
POST ~/v3/api/games/{game_id}/launch
- Grant Type:
brand_public_credentials
orplayer_credentials
- Obtain custom
play
link to launch game with custom parameters. - See documentation.
Tournaments
GET ~/v3/api/tournaments/news
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Obtain latests news about Tournaments.
- See documentation.
GET ~/v3/api/tournaments
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Obtain list of tournaments.
- See documentation.
GET ~/v3/api/tournaments/{tournament-id}
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Get details for a particular tournament.
- See documentation.
POST ~/v3/api/tournaments/{tournament-id}/registration
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Register for a tournament.
- See documentation
DELETE ~/v3/api/tournaments/{tournament-id}/registration
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Unregister from a tournament.
- See documentation
POST ~/v3/api/tournaments/{tournament-id}/rebuys
- Grant Type:
player_credentials
withplay_mode
set toReal
. - Purchase a rebuy for a tournament.
- See documentation
Competitions
GET ~/v3/api/competitions?all={true|false}
- Grant Type:
player_credentials
,brand_public_credentials
orleaderboad
. - Get the list of active competitions.
- See documentation.
GET ~/v3/api/competitions/{competitionIds}/leaderboard?limit={limit}
- Grant Type:
player_credentials
,brand_public_credentials
orleaderboad
. - Get the leaderboard associated to one or more competitions.
- See documentation.
Bonuses
POST ~/v3/api/bonuses/claim
- Grant Type:
player_credentials
. - Claim a bonus using a bonus code, and optionally an invite code.
- See documentation.
Progressives
GET ~/v3/api/progressives/games
- Grant Type:
player_credentials
orbrand_public_credentials
- Retrieve the list of Progressive Games and their associated Jackpots.
- See documentation.
Currency
GET ~/v3/api/currencies
- Grant Type:
player_credentials
orbrand_credentials
- Get the list of supported currencies for a given brand.
- See documentation.
Chats
GET ~/v3/api/chats
- Grant Type:
player_credentials
- Obtain information about the player’s active chats
- See documentation.
Users’ Activity
GET ~/v3/api/users/{user_id}/summaries?date={yyyy-mm-dd}
- Grant Type:
brand_credentials
orrestricted_activity_subscriber
- Access to daily user activity summaries.
- See documentation
GET ~/v3/api/users/{user_id}
- Grant Type:
brand_credentials
orrestricted_activity_subscriber
- Get information about a player.
- The returned information is similar to what is accessible through JavaScript with
public_brand_credentials
orplayer_credentials
tokens. - See documentation
GET ~/v3/api/users/{user_id}/games
- Grant Type:
brand_credentials
orrestricted_activity_subscriber
- Get the list of a player’s favorite games.
- See documentation
GET ~/v3/api/registrations?date={yyyy-mm-dd}
- Grant Type:
brand_credentials
orrestricted_activity_subscriber
- Access to new registrations on a given date.
- See documentation
GET ~/v3/api/tracking/{tracking_id}
- Grant Type:
brand_credentials
ortracking
- Retrieve affiliate tracking info for debugging purposes on test environments.
- See documentation
Signons
GET ~/v3/api/signons/{signonId}
- Grant Type:
offline_signon
- Endpoint URL retrieved from
~/v3/pages/login/offline_signon
page or~/v3/api/auth/offline_signon/token
response - Obtain information about the player’s signon
- See documentation.
Referrals
GET ~/v3/api/referrals
- Grant Type:
player_credentials
- Obtain player’s referral information.
- Used by the referrer.
- See documentation.
GET ~/v3/api/referrals/{referral_code}
- Grant Type:
player_credentials
orbrand_public_credentials
- Obtain information about a referral from a referral code.
- Used by referee / referral pages.
- See documentation.
POST ~/v3/api/referrals/claim
- Grant Type:
player_credentials
- Claim a referral bonus.
- Used by both the referrer or the referee.
- See documentation.
SignalR
GET ~/v3/api/notifications?access_token={token}
- Grant Type:
player_credentials
- Endpoint URL for SignalR integration.
- Recommended transport is Web Sockets.
- See documentation for usasge and list of messages.
ZAR Migration Endpoints
GET ~/v3/api/migrations/{migration-id}
- Grant Type:
brand_public_credentials
- Obtain information about the migration status.
- See documentation.
POST ~/v3/api/migrations/{migration-id}
- Grant Type:
brand_public_credentials
- Migrate a player from the ZAR Bet brand to the Kore brand.
- See documentation.
Versioning
Example of
X-Kore-Version
header
X-Kore-Version: 1.0.25.3 (4da5cf1)
All URL endpoints are prefixed with v3
, because the major version number of the API is set to 3
. Additional features may be added when the minor version number is increased.
Compatibility Guarantees
These guarantees apply for going from version 3.x
to version 3.y
, where y
is greater than x
.
API endpoints will continue to exist.
No properties nor headers will be removed from responses.
Additional endpoints may be created.
Additional properties, headers or may be added to responses.
Additional request parameters or headers may be added to requests, but they can only be optional.
Unless otherwise specified in the documentation, we make no guarantees about the order of elements inside arrays, and this could change between releases.
Incompatible Changes Policy
The following changes would cause an upgrade of the major version from 1
to 2
, or 2
to 3
:
Removing an existing endpoint.
Removing an existing property or header from a response.
Requesting a new mandatory parameter for an existing request.
If an incompatible change occurs we will migrate endpoint from v2
to v3
. Existing v2
endpoints will continue to work in parallel to v3
until all operators successfully move to v3
.
A previous transition from v1
to v2
has already occurred, and all v1
endpoints have been decommissioned. The API is now transitioning from v2
to v3
.
Common Headers
Request Headers
How to Set Common Headers
curl -H "X-Kore-ReturnUrl: http://www.example.com" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer CfDJ8Kzjpmj..."
var settings = { /* ... */ };
settings["headers"] = {
"X-Kore-ReturnUrl": "http://www.example.com",
"Content-Type": "application/json",
"Authorization: Bearer CfDJ8Kzjpmj..."
};
$.ajax(settings);
Header | Description |
---|---|
X-Kore-ReturnUrl |
Required for most endpoints. URL to be used as a return URL for all _action links provided by the API. |
Authorization |
Bearer token retrieved from ~/v3/auth/token endpoint. It is required for all endpoints except the token endpoint. |
Content-Type |
This header must be set to application/json for POST , PUT and PATCH requests to indicate content is using the JSON format. |
Response Headers
Example of Response Headers
X-Kore-Version: 1.0.25.3 (4da5cf1)
Content-Type: application/json; charset=utf-8
Header | Description |
---|---|
X-Kore-Version |
Version header which indicates the exact version of the API. Always present. |
X-Kore-ErrorCode |
Deprecated. This header is added when the response is an Error, it describes the type of error. See error codes table. |
X-Error-Code |
This header is added when the response is an Error, it describes the type of error. See error codes table. It was introduced in Kore 3.16 and superedes X-Kore-ErrorCode . |
Content-Type |
This header is usually to application/json; charset=utf-8 for most responses. |
Errors
Error Type
Example of Error Response
{
"error": "invalid_request",
"error_description": "The return URL is not specified in the X-Kore-ReturnUrl header of the request.",
"uuid": "7980f224-605b-4a24-b22b-051318b54fd1"
}
Example of Invalid Request Response
{
"error": "invalid_request",
"error_description": "Invalid values for `email`, `player_info.nickname` parameters.",
"properties": ["email", "player_info.nickname"],
"uuid": "7980f224-605b-4a24-b22b-051318b5add1"
}
Parameter | Required? | Description |
---|---|---|
error |
Required | A short alphanumeric code describing the type of error. See error codes table. |
error_description |
Required | A short English-only developer oriented description of the error. It may contain more details than error . |
uuid |
Optional | A unique UUID that is assigned to specific instance of the error. Please communicate this uuid when contacting support. |
properties |
Optional | An array of strings which is optionally returned when error is set to invalid_request . It contains the paths of the properties which failed validation. A dot . is used for sub-properties. |
Error Codes
HTTP | Error Code | Description |
---|---|---|
500 | server_error |
This error indicates a problem with the Kore API. Please contact support with the uuid if the problem persist. |
429 | rate_limit_exceeded |
The request is blocked because the client has used the endpoint too frequently. Try spacing out requests. Please contact support if you need the request limits to be raised. |
429 | duplicate_request |
The request is bocked because it is a duplicate of the previous request. This is enabled on some endpoints only. |
400 | invalid_request |
The request is invalid or malformed. The description field may contain further details and explain the specific reasons for this error. |
400 | unsupported_play_mode |
The playmode is not supported. |
400 | missing_return_url |
The X-Kore-ReturnUrl header is missing in the request. |
400 | unsupported_grant_type |
The provided authorization grant type is not supported. |
400 | account_review |
The player account is locked because the account is under review. |
403 | account_locked |
The player account is locked. |
429 | account_temporarily_locked |
The player account has been temporarily locked. This may occur after entering too many consecutive invalid passwords. |
403 | account_password_locked |
The player account’s password has been locked. This may occur after entering 3 consecutive invalid passwords. This password lock feature happens only on the brands which PasswordLockSettings is enabled. |
403 | geoblocked |
The player cannot log in because the IP address belongs to a restricted country. |
400 | insufficient_balance |
The balance is not sufficient to complete the request. |
400 | canceled_ticket |
The request cannot complete because one of the provided tickets has been canceled. |
400 | currency_mismatch |
The player account cannot use the currency provided in the request. |
400 | invalid_voucher |
The voucher is invalid. |
400 | invalid_discount |
The discount is invalid. |
401 | invalid_credentials |
Authentication failed. The provided credentials were not recognized by the server. This may occur when the access token expires. |
401 | missing_credentials |
Authentication failed. No Authorization header was provided. |
401 | invalid_password |
The provided password or username is not valid. |
400 | password_reuse_forbidden |
New provided password must NOT match in last 3 passwords. |
401 | captcha_required |
Authentication failed. A CAPTCHA token is required for the request to succeed. |
401 | captcha_invalid |
Authentication failed. The provided CAPTCHA token is invalid. |
401 | expired_player_session |
The player session has expired due to player inactivity or because the player has signed in elsewhere. You should dispose of the player_credentials access token, as it is no longer valid. |
401 | expired_token |
The bearer token provided in the Authorization header has expired. |
403 | access_denied |
The provided authentication credentials do not provide sufficient access to this resource. |
404 | player_not_found |
The player could not be found. The player id is invalid or has been changed. |
403 | blocked_gamstop |
The player cannot log in because the account is registered with the GAMSTOP self-exclusion scheme. |
400 | player_already_registered |
The player is already registered. |
400 | nickname_already_registered |
The nickname is already registered. |
400 | firstname_profanity |
The provided first name is identified as a profanity. |
400 | lastname_profanity |
The provided last name is identified as a profanity. |
400 | nickname_profanity |
The provided nickname is identified as a profanity. |
404 | tracking_not_found |
The tracking information cannot be retrieved. |
401 | server_only_credentials |
Authentication failed. The grant type is for server to server backend communication and cannot be used in a web browser. The domain can be whitelisted if needed. |
404 | invalid_activation_code |
The activation code does not exist or has expired. |
400 | activation_failed |
The player account could not be activated. |
404 | invalid_fast_track_ registration_code |
The fast track registration code does not exist or has expired. |
429 | password_change_too_soon |
The Password was changed very recently. Try again later. |
Recovery Error Codes
HTTP | Error Code | Description |
---|---|---|
429 | recovery_email_exhausted |
Password recovery failed because too many attempts using the same email address have occurred. Try again later. |
429 | recovery_sms_exhausted |
Password recovery failed because too many attempts using the same mobile phone have occurred. Try again later. |
400 | recovery_contact_support |
The recovery password cannot be automated. The player should contact support. |
404 | recovery_not_found |
The password recovery attempt was not found. It may have expired. |
429 | recovery_code_exhausted |
Too many bad password recovery codes have been entered. |
400 | recovery_code_invalid |
The provided password recovery code is not valid. |
429 | recovery_resend_exhausted |
Too many password recovery codes have been sent. |
Bonus Error Codes
The errors below are specific to the bonus and tournaments endpoints.
HTTP | Error Code | Description |
---|---|---|
400 | bonus_dependency_unmet |
The Bonus Code has a prerequisite Bonus Code that has not been claimed. |
400 | bonus_deposit_unmet |
The deposit does not meet the requirements for the Bonus Code. |
400 | bonus_requires_invite |
The player does not have the required tag to use the Bonus Code. An associated invite code is required. |
400 | bonus_user_claims_exhausted |
The player has already used the Bonus Code the maximum number of times allowed. |
400 | bonus_user_claims_deposit |
The Bonus Code has already been claimed for the deposit. |
400 | bonus_claims_exhausted |
The Bonus Code has been used as much as possible and is no longer valid. |
400 | bonus_tag_violation |
The player does not have a required tag to use the Bonus code. |
400 | bonus_expired |
The Bonus Code has expired. |
400 | bonus_not_yet_valid |
The Bonus Code is not yet active. |
400 | bonus_invalid |
The Bonus Code is not valid. |
400 | bonus_user_restricted |
The player is not eligible for this bonus. |
400 | bonus_purchase_required |
The player needs to make a valid deposit to claim this bonus. |
400 | bonus_limit_reached |
The maximum number of non-deposit bonuses claimed since players last |
400 | bonus_invalid_invite |
The Invite Code is not valid. |
400 | bonus_withdrawal_made |
This bonus cannot be claimed because you have made a withdrawal. |
400 | bonus_affiliate_unmet |
The requirements for this affiliate bonus were not met by the player. This could be because the player does not have the correct affiliate token. |
400 | bonus_campaign_ineligible |
The player is not eligible for the campaign and cannot claim the associated bonus. |
400 | bonus_claim_in_progress |
Cannot claim any bonuses while another bonus claim is in progress. Please try again in a moment. |
Tournament Error Codes
The errors below are specific to the tournaments endpoints.
HTTP | Error Code | Description |
---|---|---|
400 | tournament_not_registering |
The tournament is not open for registration yet. |
400 | tournament_tag_restriction |
The player does not have a required tag to use the Tournament. |
400 | tournament_started |
The tournament has already started. |
400 | tournament_full |
The maximum number of players that can be registered for the tournament has been reached. |
400 | registration_loyalty_not_supported |
Registration failed. Loyalty is not a supported registration type. |
400 | registration_cash_not_supported |
Registration failed. Cash is not a supported registration type. |
400 | insufficient_loyalty |
The player does not have enough loyalty points to complete the request. |
400 | player_not_registered |
The player is not registered. |
400 | tournament_not_started |
The tournament is not in the Started state. |
400 | tournament_rebuys_exceeded |
The rebuy limits have been exceeded for the tournament. |
400 | tournament_balance_excessive |
The tournament balance is too high to complete the request. |
Competitions Error Codes
The errors below are specific to the competitions endpoints.
HTTP | Error Code | Description |
---|---|---|
404 | competition_not_found |
The competition could not be found. |
Referrals Error Codes
HTTP | Error Code | Description |
---|---|---|
404 | referral_disabled |
The referral feature is disabled. |
400 | referral_claim_exhausted |
This IP address or device has claimed too many referral codes. |
400 | referral_claim_failed |
You cannot claim the referral bonus. |
404 | referral_code_not_found |
The referral code is invalid. |
Verification Error Codes
HTTP | Error Code | Description |
---|---|---|
404 | no_pending_verification |
There are no pending verifications. |
400 | invalid_sms_code |
SMS Verification Code invalid. |
400 | too_many_verification_retries |
Too many verification retried attempted. Try again later. |
400 | invalid_sms_code_length |
SMS Verification Code length invalid. |
400 | verification_code_expired |
Verification code expired. Try again. |
400 | queued_awaiting_sms_send |
Verification code queued and is awaiting send. Please wait and try again. |
ZAR Migration Error Codes
HTTP | Error Code | Description |
---|---|---|
404 | migration_not_found |
The migration could not be found. |
400 | migration_not_available |
The player already has an existing account and cannot be migrated. |
400 | migration_completed |
The player account has already been migrated. |
400 | migration_expired |
The migration ID has expired. A new migration ID must be obtained. |
500 | migration_failed |
The migration has failed. Please contact support. This error occurs after the player account has been created. |
Non Fatal Errors
Example of non-fatal validation error returned in registration response
{
"errors": [
{
"error": "invalid_request",
"error_description": "Invalid value for `device_id` parameter.",
"properties": ["device_id"],
"uuid": "7980f224-605b-4a24-b22b-051318b5add1"
}
],
"registration_status": "Success",
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2022-01-27T11:58:35Z",
"value": "CfDJ8EoQ6g[...]"
}
],
"_links": {
"user": {
"href": "http://www.example.com/v3/api/users/YnNNOUFmN3Zlc3A5cFY9Y280dUFKc01PMjNjMkp3PT0.",
"method": "GET"
},
"logout": {
"href": "http://www.example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US"
}
}
The Kore API is quite strict and would normally reject any invalid requests with an invalid_request
error with a 400
status. However, non fatal errors were introduced in Kore 3.14.
The validation process is different when the request contains optional properties that have been explicitly marked as supporting non-fatal validation. When these properties fail validation, the API reject them by omitting them from the request; in other words the API process the request as if the invalid properties had not been set.
Non-fatal validation errors are returned in an optional errors
array added to the success response. In general, this array contains a single error with an invalid_request
error code. The error is the same the API would have returned if the strict request validation had been used. The API may return additional non fatal errors in the future.
Non fatal errors may be logged as usual and may contain the uuid
property.
Non-fatal validation is supported for a subset of properties which are explicitly documented. At present it is only the device_id
and the tracking
context object from the authentication and user registration endpoints.
Links
Link Categories
Example of Link Collections
{
"_links": {
"query_me": { "href": "http://www.example.com/v3/api/some-resource" },
"other_query_me": { "href": "http://www.example.com/v3/api/other-resource" }
},
"_actions": {
"follow_me": { "href": "http://www.example.com/webpage.html" },
"follow_me_again": { "href": "http://www.example.com/another-page.html" }
}
}
The API returns two kinds of links which are used throughout the API.
Category | JSON | Description |
---|---|---|
Actions | _actions |
These are links to web pages that are to be followed by the browser. The URL passed in the X-Kore-ReturnUrl header is used to return to the casino page. |
API links | _links |
These are API links to other resources vended by the API. These links may contain IDs. |
Link Types
Link Collection
The API returns hyperlinks in the form of JSON objects which are referred as the LinkCollection
type in the rest of the documentation. Each property is a Link
with property name indicating the purpose of the link.
Link
The Link
type contains a single href
property.
Property | Required? | Type | Description |
---|---|---|---|
href |
Required | String | URL as defined in RFC3986 |
method |
Optional | String | HTTP method as defined in RFC7231. If missing, it is assumed to be GET . |
Example of code you MUST NOT write
var response = $.ajax({
"url": "http://example.com/v3/api/users?platform=html&category=videoslots",
"method": "GET",
"headers": {
"authorization" : `bearer ${userToken}`
}
});
// DONT DO THIS
// There is NO guarantee that the `SessionID` will exist.
// We can change the URL format at *any time* without notice.
var session_ids = response.games.map(x => x._actions["play"].href.match(/sessionid=([^&]+)&/)[1]
Money
Money Type
Example of Balance with 819.00 practice credits.
{
"currency": "XXX",
"amount" : 81900,
"exponent" : 2
}
How to obtain decimal representation in JavaScript.
const decimal = money.amount / Math.pow(10, money.exponent)
The amount of credits is returned as a pair of two integers: amount
and exponent
. In order to obtain the number of credits in decimal representation, one must divide the amount
by the 10 to power of exponent
.
Property | Required? | Type | Description |
---|---|---|---|
currency |
Required | String | Currency code. See below. |
amount |
Required | Integer | Amount of credits. |
exponent |
Required | Integer | Exponent for decimal part. This is called the minor unit in ISO 4217. It represents the number of digits after the decimal point. |
Decimal Money Type
Example of $0.000001
{
"currency": "USD",
"decimal_amount" : 0.000001
}
The Decimal Money Type is used by endpoints which return fractional monetary amounts that are too small to be represented by the regular Money Type.
Property | Required? | Type | Description |
---|---|---|---|
currency |
Required | String | Currency code. See below. |
decimal_amount |
Required | Decimal | Decimal amount of credits. |
Currency
Internal Currency Codes
Kore uses the following internal currency codes to represent non monetary credits.
Currency Code | Exponent | Description |
---|---|---|
XXX |
2 | Practice Credits |
XTC |
2 | Tournament Credits. |
Fiat Currency Codes
Kore also uses the following ISO 4217 currency codes to represent national currencies.
Currency Code | Exponent | Description |
---|---|---|
GBP |
2 | Pound Sterling |
EUR |
2 | Euro |
USD |
2 | US Dollar |
CAD |
2 | Canadian Dollar |
SEK |
2 | Swedish Krona |
NOK |
2 | Norwegian Krone |
DKK |
2 | Danish Krone |
AUD |
2 | Australian Dollar |
CNY |
2 | Yuan Renminbi |
CZK |
2 | Czech Koruna |
CHF |
2 | Swiss Franc |
RUB |
2 | Russian Ruble |
UAH |
2 | Ukrainian Hryvnia |
TRY |
2 | Turkish Lira |
NZD |
2 | New Zealand Dollar |
AMD |
2 | Armenian Dram |
PLN |
2 | Polish Zloty |
GEL |
2 | Georgian Lari |
MXN |
2 | Mexican Peso |
ZAR |
2 | South African Rand |
INR |
2 | Indian Rupees |
Example: 125.00 mBTC
{
"currency": "BTC",
"amount" : 12300000,
"exponent" : 8
}
Example: 1 Satoshi or 0.00000001 BTC
{
"currency": "BTC",
"amount" : 1,
"exponent" : 8
}
Crypto Currency Codes
Kore uses the following crypto currencies codes.
Currency Code | Exponent | Description |
---|---|---|
BTC or XBT |
8 | Bitcoin |
BCH |
8 | Bitcoin Cash |
LTC |
8 | Litcoin |
Get List of Currencies
The following endpoint can be used to retrieve a list of currencies active for a given brand. Active currencies are opened for registrations to new players.
The brand information is provided by the bearer token.
GET ~/v3/api/currencies
curl -X GET -H "Content-Type: application/json" \Ge
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {brand_token}" \
"http://example.com/v3/api/currencies"
$.ajax({
"url": "http://example.com/v3/api/currencies",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {brand_token}"
}
});
Response:
{
"currencies": [
{
"currency": "EUR",
"symbol": "€",
"iso_exponent": 2,
"display_exponent": 0,
"display_decimals": 2
},
{
"currency": "USD",
"symbol": "$",
"iso_exponent": 2,
"display_exponent": 0,
"display_decimals": 2
},
{
"currency": "BTC",
"symbol": "mɃ",
"iso_exponent": 8,
"display_exponent": 3,
"display_decimals": 2
},
{
"currency": "XBT",
"symbol": "mɃ",
"iso_exponent": 8,
"display_exponent": 3,
"display_decimals": 3
},
{
"currency": "INR",
"symbol": "₹",
"iso_exponent": 2,
"display_exponent": 0,
"display_decimals": 0
}
]
}
HTTP Request
GET ~/v3/api/currencies
HTTP Method | GET |
Path | ~/v3/api/currencies |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
HTTP Response
This endpoint returns a currencies
array which contains Currency
objects.
Property | Required? | Type | Description |
---|---|---|---|
currencies |
Required | Array of Currency objects |
List of supported currencies for the brand. |
Each Currency
object contains a single currency
property which points to one of the currency codes from above.
Property | Required? | Type | Description |
---|---|---|---|
currency |
Required | String | A currency country code from the list above. |
symbol |
Required | String | The currency symbol normally used to display the currency. |
iso_exponent |
Required | Number | An integer which represents the maximum number of decimals possible for the target currency. This is the exponent used by the Money objects returned by the API. It follows ISO 4217. |
display_exponent |
Required | Number | An integer which is used for some crypto currencies. It is normally set to 0 for fiat currencies, 3 for “milli” and 6 for “micro” variants of crypto currencies. |
display_decimals |
Required | Number | The number of decimals required to be displayed in the UI. The provided amounts are guaranteed to fit. The number of digits may be less than what is possible following the relevant ISO 4217 or crypto currency specification. |
Example: format XBT using
GET ~/v3/api/currencies
info
money = { amount: 123400, exponent: 8, currency: "XBT" }
currency = { symbol: "mɃ", display_exponent: 3, display_decimals: 3 }
decimal_amount = money.amount / Math.pow(10, money.exponent) = 1234
scale_amount = decimal_amount / Math.pow(10, decimal_exponent) = 1.234
str_amount = "1.234"
display_amount = "mɃ1.234"
display_amount_fr = "1,234 mɃ"
Example: format INR
money = { amount 4200, exponent: 2, currency: "INR" }
currency = { symbol: "₹", display_exponent: 0, display_decimals: 0 }
decimal_amount = money.amount / Math.pow(10, money.exponent) = 42
scale_amount = decimal_amount / Math.pow(10, decimal_exponent) = 42
display_amount = "₹ 42"
The demo code associated to the Kore API typically loads up the currencies upon startup. Since the information is unlikely to change often, the result from this call could easily be cached or embedded into client code.
The currency information can be used to turn Money
objects into a displayable strings.
A naïve version of a display algorithm would work as follows:
- Convert
Money
object to decimal representation:decimal_amount = money.amount / Math.pow(10, money.exponent)
. - Scale using the display exponent:
scaled_amount = decimal_amount / Math.pow(10, display_exponent)
. - Render amount as a string with display decimals using the correct local specific symbols for the decimal points and thousand separators.
- Append currency symbol in the correct position (left or right) with or without a space.
The demo site offers an implementation of the display algorithm which requires no external dependencies other than lodash. It is possible to use Intl.NumberFormat
but it gets tricky to deal with crypto currencies correctly.
Authentication
Authorization Header
Example of Authorization Header
Authorization: Bearer CfDJ8PDvwkpMOppOnlGDa1p5Ii/pmOx8xvVaErpsQtNRbQuahQUDDHDDxjgQ3eDoq5Wjre+UVHmhGhybfoUFm9UqyZ1aM2S39mk+Qlj3qyjabMG0dvk1oslKPvhc0LaEaJyyfcIWIedYlNmSrplisvxfMDnRuMcxxsj7YsiC07Z1UC37ZqVaLswTZoF92HWOr3RiLoZtOCDhXylPDbAdwYJrZ2GPrW0+9VUQbpEPODchLqei1VJvVaXneP+pjJ6cFJiytx1/Al80frncrsX5yt1k+0U97jNrRZzdaBmQHQq2oy9gtrhs0928aDMZLC+5mFYIRKG29/+S5dROcjdGqsQQfXKk4wzm/PCsCl7RMFg3cw5Q+CKUdjW82fFTDJRpMMAwDA==
All calls to the Kore API except some authentication endpoints under ~/v3/api/auth
require authentication.
Authentication is provided through the use of bearer tokens which are passed to the API using the Authorization
header. Authentication tokens are obtained by sending requests to specific unauthenticated ~/v3/api/auth/{grant_type}/token
endpoints.
Each token has an associated grant type. Each grant type has a different set of requirements and provide a different set of permissions. Access to endpoints is typically restricted to specific grant types.
Grant Types
The API currently provide the following of grant types:
grant_type |
Description |
---|---|
brand_public_credentials |
Identifies a particular brand and locale. This is a low privilege access that requires no shared secret. |
player_credentials |
Identifies a logged-in user. This access requires the user email and password. |
brand_credentials |
Privileged. Provide access to all privileged endpoints. |
restricted_activity_subscriber |
Privileged. Provide access to all user activity endpoints. |
tracking |
Privileged. Provide access to the tracking debugging endpoint. |
leaderboard |
Privileged. Provide access to the competition leaderboard endpoint without any of the limits that would normally apply. |
player_verification_credentials |
Identifies a logged-out user. The token can only be used on the endpoints to enter the SMS code or resend the code. |
player_change_password |
Identifies a logged-out user. The token can only be used to force the player to change its password on the password change endpoint. |
launch_game |
Identifies a token which can be used only to launch a game. This is specific to the obtain launch token endpoint. |
Token Object
Example of
tokens
array
{
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
},
{
"type": "Auth",
"expiration": "2020-08-12T08:08:41Z",
"value": "Askuwkdl…"
}
]
}
Most authentication endpoint return a tokens
array which contain Token
objects that vend the following properties:
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | String |
|
expiration |
Required | String | Expiration of the token as a ISO 8601 UTC Date (yyyy-mm-ddThh:mm:ssZ ). The token is no longer valid after expiration. |
value |
Required | String | Value of the token to be provided to the API. |
Obtain a Privileged Brand Token
POST ~/v3/api/auth/{grant_type}/token
HTTP Method | POST |
Path | ~/v3/api/auth/{grant_type}/token |
Required Headers | Content-Type |
Grant Type | None |
curl -X POST -H "Content-Type: application/json" -d '{ \
"brand_id": "CasinoBrand", \
"locale": "en-US", \
"secret": "SuperSecretThing" \
}' "http://example.com/v3/api/auth/restricted_activity_secret/token"
Path Parameters
The following parameters are provided in the URL path.
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Must be set to brand_credentials or restricted_activity_subscriber . See authentication types. |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
brand_id |
Required | String | Pass the Brand ID that identifies the casino. |
locale |
Required | String | Locale code defined in Locales. |
secret |
Required | String | Secret used to authenticate the brand. |
Response:
{
"grant_type": "restricted_activity_subscriber",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
]
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Convenience. Set to the grant_type provided in the request. |
tokens |
Required | Array of Tokens | Array of Tokens. Contains at least one token whose type is Bearer . |
Expiration Policy
Typically privileged tokens are valid until date and time reach the returned expiration
. The life time of tokens is typically set to 24 hours.
If you get a expired_token
error or any 401
error when using a token, you should stop using the token and consider it invalid. You may obtain a new fresh token by re-using the endpoint.
Obtain a Public Brand Token
A brand_public_credentials
bearer token ties all further calls to the API to a particular brand. Since this is a low privilege access that requires no shared secret, you may obtain the bearer token using JavaScript running inside an HTML page.
HTTP Request
POST ~/v3/api/auth/brand_public_credentials/token
HTTP Method | POST |
Path | ~/v3/api/auth/brand_public_credentials/token |
Required Headers | X-Kore-ReturnUrl , Content-Type |
Grant Type | None |
POST ~/v3/api/auth/brand_public_credentials/token
curl -X POST -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" -d '{ \
"grant_type": "brand_public_credentials", \
"brand_id": "CasinoBrand", \
"locale": "en-US" \
}' "http://example.com/v3/api/auth/brand_public_credentials/token"
var payload = {
"brand_id": "CasinoBrand",
"locale": "en-US"
};
$.ajax({
"url": "http://example.com/v3/api/auth/brand_public_credentials/token",
"method": "POST",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
},
"data": JSON.stringify(payload)
});
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
brand_id |
Required | String | Pass the Brand ID that identifies the casino. |
locale |
Required | String | Locale code defined in Locales. |
tracking |
Optional | TrackingContext |
User tracking context. Non fatal validation is used. |
Response:
{
"grant_type": "brand_public_credentials",
"locale": "en-US",
"tracking_id": "6507763a-70aa-45ec-a523-162c0325d043",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
]
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Convenience. Set to brand_public_credentials . |
locale |
Required | String | Set to the locale value provided in the request. |
tokens |
Required | Array of Tokens | Array of Tokens. Contains at least one token whose type is Bearer . |
tracking_id |
Optional | String | Tracking ID. See TrackingContext . |
_actions |
Optional | LinkCollection | A link collection containing a actions relevant to the brand. |
errors |
Optional | Array of errors | Returned if a non fatal error has occurred. |
Actions
Link Name | Required? | Description |
---|---|---|
landing |
Optional | Landing URL associated to the mid in the Affiliate Manager. See TrackingContext . |
Expiration Policy
The access token typically expires after 24 hours. All calls to the API with an expired token will result in a expired_token
error being returned.
When the brand_public_credentials
bearer token expires, you can obtain a new one by using the ~/v3/api/auth/brand_public_credentials/token
endpoint.
Obtain a Player Token
A player_credentials
bearer token ties all further calls to the API to a particular player.
HTTP Request
POST ~/v3/api/auth/player_credentials/token
HTTP Method | POST |
Path | ~/v3/api/auth/player_credentials/token |
Required Headers | X-Kore-ReturnUrl , Content-Type |
Grant Type | None |
Rate Limits | 20 requests per minute; 100 requests per 10 minutes; 300 requests per hour |
POST ~/v3/api/auth/player_credentials/token
curl -X POST
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com" \
-d '{ \
"brand_id": "TestBrand", \
"locale": "en-US", \
"email": "bob@example.com", \
"password": "correct horse battery staple", \
"play_mode": "Practice", \
"device_id": "W4TifY3XvBP2ZftnrKZo", \
"captcha": { \
"type": "reCAPTCHAv2", \
"token": "03AGdB…" \
} \
}' \
"http://example.com/v3/api/auth/player_credentials/token"
var payload = {
brand_id: "TestBrand",
locale: "en-US",
email: "bob@example.com",
password: "correct horse battery staple",
play_mode: "Practice",
captcha: {
type: "reCAPTCHAv2",
token: "03AGdB…"
},
device_id: "W4TifY3XvBP2ZftnrKZo"
};
$.ajax({
"url": "http://example.com/v3/api/auth/player_credentials/token",
"method": "POST",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.google.com"
},
"data": JSON.stringify(payload)
});
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
brand_id |
Required | String | Pass the Brand ID that identifies the casino. |
locale |
Required | String | Locale code defined in Locales. |
email |
Required | String | Email of the user. |
password |
Required | String | Password for the user. |
play_mode |
Required | String | Practice or Real . |
tracking |
Optional | TrackingContext |
User tracking context. Non fatal validation is used. |
captcha |
Optional* | CAPTCHA Token | The CAPTCHA token is usually not required unless a captcha_required error is returned and the CAPTCHA Status marks CAPTCHA tokens as mandatory. |
device_id |
Optional | String (max 20 chars) | This value corresponds to the visitorId returned by the FingerprintJS Pro API.Non fatal validation is used. |
HTTP Responses
There are many types of responses possible from the API.
They are documented in the Player Token Response section below.
Player Token Response
Overview
The main provider for this response is the login endpoint.
In addition the following endpoints return an auth
property which follows the exact same structure
- Registration Endpoint
- Password Changed Endpoint when using a
player_change_password
grant type - SMS Verification Endpoint when using a
player_verification_credentials
grant type
Outcomes
Name | Grant type | Expected Action |
---|---|---|
Login Success | player_credentials |
Store in a cookie. Call any endpoints that require play authentication. |
Follow Link | None | Follow the URL provided in the response. This is a legacy behavior but it still possible to trigger it. |
Follow Link + Activation | None | Do NOT follow the URL. Use activation endpoint. |
Change Password | player_change_password |
You MUST use the password change endpoint. |
SMS Verification | player_verification_credentials |
You MUST use the SMS verification endpoint endpoint. |
Capture Player Info | extra_player_info |
You MUST use the amend user info endpoint. |
ZAR Migration | None | You MUST issue pass the returned migration ID to the new casino. The new casino shall use migration endpoint to complete the migration. |
Follow and Activation
Response containing
follow
action
{
"_actions": {
"follow": { "href": "http://www.example.com/go-there" }
},
"activation": {
"code": "8F88577B61D2DE940269B4AB99E1B351",
"expiration": "2022-10-10T20:34:10Z",
"brands": [ "MyCasino", "MyOtherCasino" ],
"reset_password": {
"href": "https://www.casino.com/forgotten_password?email=bob@example.com",
"method": "GET"
},
"password_required": false
}
}
A response containing a follow
action link to a web page. This page would be shown if further validation of the player account is required before they can log in.
Property | Required? | Type | Description |
---|---|---|---|
_actions |
Required | LinkCollection | A link collection containing a follow action. |
activation |
Optional | Activation object |
The activation object may be returned along side some follow actions. |
The follow
action is only present when the tokens
are not issued in the response.
An activation
object may also be returned, since Kore version 3.17.
You should make the user’s browser navigate to the page. The URL passed in X-Kore-ReturnUrl
is used to go back to the Casino’s page. Upon return from this page, it should be possible to obtain a player_credentials
token.
Migration Response
The migration response indicates that the player’s account needs to be migrated to a different casino.
Example of migration response
{
"migration": {
"target_brand": "SomeCasino",
"expiration": "2024-11-22T11:03:03Z",
"migration_id": "52RAZ94yYpiGeSS3RAcpS3xeBE15mzB6U1dKE9Z_XkYAuY4Vlm3lfJrpdIAPR_Q."
}
}
Property | Required? | Type | Description |
---|---|---|---|
target_brand |
Required | String | The brand ID of the casino where the player account needs to be migrated to |
expiration |
Required | String | Expiration date for the migration ID in ISO 8601 format (yyyy-mm-ddThh:mm:ssZ) |
migration_id |
Required | String | A base64 encoded string that contains the migration ID. |
When a migration outcome is received, no authentication tokens are issued and the player must complete the migration process.
The migration_id
is used to complete the migration process. The new casino will use the migration endpoints to complete the migration.
Token Response
Response containing
tokens
array with aplayer_credentials
grant type.
{
"grant_type": "player_credentials",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
],
"_links": {
"user": {
"href": "http://www.example.com/v3/api/users/{userid}",
"method": "GET"
},
"logout": {
"href": "http://www.example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
}
}
Response containing a
tokens
array with aplayer_verification_credentials
grant type
{
"grant_type": "player_verification_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-03-07T09:37:11Z",
"value": "CfDJ8FheFto…"
}
],
"tracking_id": "37e22704-39c5-4662-a4a6-48c0f15a3437",
"_links": {
"verification": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0./verification",
"method": "POST"
},
"verification_retry": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0./verification/retry",
"method": "POST"
}
},
"locale": "en-US",
"email": "bob@example.com",
"registration_status": "HardSmsVerificationRequired"
}
A response containing a valid tokens
array.
You are only fully logged in if the grant_type
is set to player_credentials
. If the grant type is different please refer to the above outcomes section.
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Convenience. Set to player_credentials , player_verification_credentials or player_change_password |
locale |
Required | String | Convenience. Set to the locale provided in the request. |
tracking_id |
Optional | String | Tracking ID. See TrackingContext . |
tokens |
Required | Array of Tokens | Array of Tokens. Contains at least one token whose type is Bearer . |
_links |
Required | LinkCollection | A link collection containing a link to the current user. |
errors |
Optional | Array of errors | Returned if a non fatal error has occurred. |
registration_status |
Optional | RegistrationStatusEnum | Returned when brand is enabled for SMS verification prior to login and player hasn’t verified his/her phone. |
missing_player_info |
Optional‡ | MissingPlayerInfo | Returned when the grant type is extra_player_info to indicate which info are missing for the user. |
The user
link is only present when the tokens
array is present.
Link Name | Required? | Description |
---|---|---|
user |
Optional† | Link to GET ~/v3/api/users/{userid} , which provides access to player’s information.Required for player_credentials grant type. |
logout |
Optional† | Link to DELETE ~/v3/api/auth/player_credentials endpoint.Required for player_credentials grant type. |
verification |
Optional† | Link to POST ~/v3/api/users/{user_id}/verification endpoint.Required for player_verification_credentials grant type. |
verification_retry |
Optional† | Link to POST ~/v3/api/users/{user_id}/verification/retry endpoint.Required for player_verification_credentials grant type. |
change_password |
Optional† | Link to PUT ~/v3/api/users/{user_id}/password endpoint.Required for player_change_password grant type. |
extra_player_info |
Optional† | Link to PATCH ~/v3/api/users/{user_id} endpoint.Required for extra_player_info grant type. |
Missing Player Info
Example of response with
missing_player_info
{
"grant_type": "extra_player_info",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-09-08T14:19:04Z",
"value": "CfDJ8G..."
}
],
"tracking_id": "412976f3-3d93-4f97-83c2-931e3823ee4d",
"_links": {
"amend_user": {
"href": "https://example.com/QXFwZEZKTUtLN1hxT3hYN2owbzZxemNpOThMSFNRPT0.",
"method": "PATCH"
}
},
"locale": "en-US",
"email": "bob@example.com",
"missing_player_info": [
"Address"
]
}
The missing_player_info
is an array of string enumerations, returned in the body of the PlayerTokenResponse
object to denote which properties need to be captured. This array is mandatory whenever the grant_type
is set to extra_player_info
.
Currently the only type of information about capturing the address, so the only possible value is Address
.
Enum Value | Description |
---|---|
Address |
The address details are insufficient. This may be because the Address was never provided or is deemed to be incomplete. |
Expiration Policy
A player_credentials
token’s expiration
property is typically set 24 hours in the future. However, this value merely represents a maximum that is unlikely to be reached in practice.
The underlying player session that underpins player_credentials
tokens would normally expire sooner:
- because the player has been inactive for some time (typically 20 minutes)
- because the player has signed out
- in accordance to the single sign on policy. A session expires when the player obtains a new
player_credentials
token on a different computer or on a different browser.
When attempting to use a player_credentials
token whose underlying session has expired, as explained above, the API issues a expired_player_session
error. When this error is encountered, or any other 401
error, you should stop using the token and consider it invalid. You may also attempt to obtain a new player_credentials
token and, consequently, prompt the player to enter their credentials again.
Errors
The invalid_password
, account_review
and account_password_locked
errors can also be returned from this endpoint. An optional errors
array may also be returned in success responses, in case a non fatal error has occurred.
See errors.
Mutate a Player Token
You can use this endpoint to obtain a new token with the same player_credentials
grant type for the same player without the need to provide the player’s credentials.
In order to this endpoint, you must have obtained a player_credentials
token previously, as documented above.
This endpoint is typically used to switch between play modes or locales without requesting the player’s credentials.
POST ~/v3/api/auth/player_credentials/token/mutate
curl -X POST
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com" \
-H "Authorization: Bearer {user-token}" \
-d '{ \
"play_mode": "Practice" \
}' \
"http://example.com/v3/api/auth/player_credentials/token/mutate"
var payload = {
"play_mode": "Practice"
};
$.ajax({
"url": "http://example.com/v3/api/auth/player_credentials/token/mutate",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"X-Kore-ReturnUrl": "http://www.google.com",
"Authorization: Bearer {user-token}"
},
"data": JSON.stringify(payload)
});
HTTP Request
POST ~/v3/api/auth/player_credentials/token/mutate
HTTP Method | POST |
Path | ~/v3/api/auth/player_credentials/token/mutate |
Required Headers | X-Kore-ReturnUrl , Content-Type and Authorization |
Grant Type | player_credentials |
Response containing a
tokens
array
{
"grant_type": "player_credentials",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
],
"_links": {
"user": {
"href": "http://www.example.com/v3/api/users/{userid}",
"method": "GET"
},
"logout": {
"href": "http://www.example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
}
}
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
play_mode |
Optional | String | Practice or Real . |
locale |
Optional | String | Locale code defined in Locales. |
tracking |
Optional | TrackingContext |
User tracking context. Non fatal validation is used. |
You must provide either play_mode
or locale
for the request to be valid.
HTTP Response
This request generates a response of the same kind than what is described in the obtain a new player token section.
The returned tokens from this endpoint should supersede any previously obtained tokens for the player.
Sign out a Player Token
The sign out endpoint can be used to destroy the underlying game service session. That means no further games or web application page can be accessed by following links provided by Kore before the session was closed. Pages of web application and games that have already been opened will also stop working upon further actions. The Kore API will start emitting expired_player_session
errors on endpoints that depends on the validity of the attached player credentials token.
DELETE ~/v3/api/auth/player_credentials
curl -X DELETE
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com" \
-H "Authorization: Bearer {user-token}" \
"http://example.com/v3/api/auth/player_credentials"
$.ajax({
"url": "http://example.com/v3/api/auth/player_credentials",
"method": "DELETE",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.google.com",
"Authorization: Bearer {user-token}"
}
});
HTTP Request
DELETE ~/v3/api/auth/player_credentials
HTTP Method | DELETE |
Path | ~/v3/api/auth/player_credentials |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
HTTP Response
If the call succeeds you receive a 200
HTTP status. Please note that you will receive a expired_player_session
error if you have already logged out (or logged in elsewhere due to single sign on), or the regular authentication errors expired_token
, access_denied
, missing_credentials
for using invalid tokens.
Activate Player Account
The activation endpoint is used to activate an account that exists with another brand.
It is necessary to obtain an Activation
object before using this endpoint.
curl -X POST
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com" \
-H "Authorization: Bearer {user-token}" \
-d '{ \
"brand_id": "MyCasino", \
"locale": "en-US", \
"code": "43A71C94CEDA47CE4EC6CB2171E0BF14", \
"play_mode": "Real", \
"password": "TopSecret!"
}' \
"http://example.com/v3/api/auth/player_credentials/token/activate"
var payload = {
"brand_id": "MyCasino",
"locale": "en-US",
"code": "43A71C94CEDA47CE4EC6CB2171E0BF14",
"play_mode": "Real",
"password": "TopSecret!"
};
$.ajax({
"url": "http://example.com/v3/api/auth/player_credentials/token/activate",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"X-Kore-ReturnUrl": "http://www.google.com",
"Authorization: Bearer {user-token}"
},
"data": JSON.stringify(payload)
});
HTTP Request
POST ~/v3/api/auth/player_credentials/activate
HTTP Method | POST |
Path | ~/v3/api/auth/player_credentials/activate |
Required Headers | X-Kore-ReturnUrl , Content-Type , |
Grant Type | public_brand_credentials |
Rate Limits | 20 requests per minute; 100 requests per 10 minutes; 300 requests per hour |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
brand_id |
Required | String | Pass the Brand ID that identifies the casino. |
locale |
Required | String | Locale code defined in Locales. |
code |
Required | String | The code from the Activation object. |
play_mode |
Required | String | Practice or Real . |
password |
Optional* | String | The password from the existing player’s account. This property should only be provided if email_required is set to true in the Activation object. |
tracking |
Optional | TrackingContext |
User tracking context. Non fatal validation is used. |
device_id |
Optional | String (max 20 chars) | This value corresponds to the visitorId returned by the FingerprintJS Pro API.Non fatal validation is used. |
welcome |
Optional | Welcome |
Object containing additional information about the welcome pages. Non fatal validation is used. |
Response with Auth Tokens
{
"grant_type": "player_credentials",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
],
"_links": {
"user": {
"href": "http://www.example.com/v3/api/users/{userid}",
"method": "GET"
},
"logout": {
"href": "http://www.example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
}
}
HTTP Response
In case of failure, the endpoint returns an error with an associated 4xx
or 5xx
HTTP status code. Typically an invalid_activation_code
or activation_failed
error. The latter is generally returned when the passwords do not match, or if the account has already been activated.
In case of success, the endpoint returns a 200
HTTP status response with the same body as the GET ~/v3/api/auth/player_credentials/token
endpoint response.
Obtain an Offline Signon Token
This authentication method is only suitable for an app. The authentication is valid for all brands in the brand group.
The credentials are not provided directly to the API. Instead the player is invited to load the following Web page and the authentication tokens are returned to the App via specific JavaScript callbacks.
HTTP Request
GET ~/v3/pages/login/offline_signon?locale={locale}&mode={mode}&brandGroup={brand_group}
HTTP Method | GET |
Path | ~/v3/pages/login/offline_signon |
Required Headers | None |
Grant Type | offline_signon |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
locale |
Required | string | Only en-US is supported at the moment. |
mode |
Required | string | Only the value MobileApp is acceptable. |
brandGroup |
Required | string | The internal name of the brand group. Typically uses a PascalCase naming convention. |
Example of JavaScript callback implementation
window.app = {
onLoginSuccess: function(response) {
console.info("Login success!");
const bearer_token = response.tokens.filter(x=>x.type === "Bearer")[0].value;
console.info("Bearer Token: " + bearer_token);
const auth_token = response.tokens.filter(x=>x.type === "Auth")[0].value;
console.info("Auth Token: " + auth_token);
},
onLoginError: function(error) {
console.error("Login failed!");
console.error(error);
}
}
JavaScript Callbacks
The pages communicates the results of the authentication to the calling app, by calling specific JavaScript functions, exposed in the window.app
interface. It is the responsibility of the App to implement all the callbacks of the interface as described below.
Callback | Signature | Description |
---|---|---|
onLoginError |
(error: Error) => void |
The function is called in case an unexpected error occurs. Expected errors such as invalid_password are handled by the web page. The callback accepts a single parameter which is the Error used by the Kore API. |
onLoginSuccess |
(auth: SignonResponse) => void |
The function is called when the player successfully authenticates. The callback accepts a single SignonResponse parameter. |
Example of onLoginSuccess() callback
{
"grant_type": "offline_signon",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-09-17T09:18:26Z",
"value": "CfDJ8A...rGLq89Y="
},
{
"type": "Auth",
"expiration": "2020-12-15T09:18:26Z",
"value": "CfDJ...CRI="
}
],
"_links": {
"sign_on": {
"href": "https://example.com/v3/api/signons/OnBPcrCv0uXrrpFUxbMtMQ",
"method": "GET"
}
}
}
Signon Response
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Convenience. Set to offline_signon |
locale |
Required | String | Convenience. Set to the locale provided in the query parameter |
tokens |
Required | Array of Tokens | Array of Tokens. Contains at least one token whose type is Bearer and one Auth |
_links |
Required | LinkCollection | A link collection containing a link to the signon. |
Links
Link Name | Required? | Description |
---|---|---|
signon |
Required | Link to ~/v3/api/signon/{signonId} , which provides access to signon’s information. |
Tokens
The Bearer token can passed to the API via the Authorization
header in order to access endpoints which require an offline_signon
grant type.
The Bearer token has a much shorter lifetime than the Auth token. The Auth token can only be used to refresh the values of both tokens via a dedicated API endpoint.
Both token typically remain valid until they expire. The tokens do not become invalid as consquence of the single sign on policy nor due to idleness. Therefore, great care should be used to store these tokens securily. It is recommended to use the device’s KeyChain on iOS and KeySore on Android.
Typically the Auth token is valid for up to three months. However, tokens become invalid if the player changes their passwords.
Refresh an Offline Signon Token
POST ~/v3/api/auth/offline_signon/token
curl -X POST -H "Content-Type: application/json" -d '{ \
"token": "CfDJ...CRI=", \
}' "http://example.com/v3/api/auth/offline_signon/token"
var payload = {
"token": "CfDJ...CRI="
};
$.ajax({
"url": "http://example.com/v3/api/auth/offline_signon/token",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"data": JSON.stringify(payload)
});
This is a regular API endpoint. It should be used when the Bearer token obtained via the Authentication Page has expired. The caller should update the value of both the Bearer and Auth tokens using this endpoint.
HTTP Request
POST ~/v3/api/auth/offline_signon/token
HTTP Method | POST |
Path | ~/v3/api/auth/offline_signon/token |
Required Headers | Content-Type |
Grant Type | offline_signon |
POST Parameters
Property | Required? | Type | Description |
---|---|---|---|
token |
Required | String | The value of the Auth token obtained in the via the Authentication Page |
Response - Same schema as onLoginSuccess() callback
{
"grant_type": "offline_signon",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-09-17T09:18:26Z",
"value": "CfDJ8A...rGLq89Y="
},
{
"type": "Auth",
"expiration": "2020-12-15T09:18:26Z",
"value": "CfDJ...CRI="
}
],
"_links": {
"sign_on": {
"href": "https://example.com/v3/api/signons/OnBPcrCv0uXrrpFUxbMtMQ",
"method": "GET"
}
}
}
HTTP Response
The response uses the same Signon Response JSON object than the Authentication Page
Error Handling
If the endpoint returns a 401
error, the caller should delete the token
provided in the request and prompt the user to enter their credentials again via the Authentication Page.
Check CAPTCHA Status
The GET ~/v3/api/auth/player_credentials
endpoint can be used to check whether CAPTCHA tokens are mandatory when trying to obtain a player_credentials
token.
GET ~/v3/api/auth/player_credentials
curl -X GET
-H "Content-Type: application/json" \
"http://example.com/v3/api/auth/player_credentials"
$.ajax({
"url": "http://example.com/v3/api/auth/player_credentials",
"method": "GET",
"headers": {
"content-type": "application/json"
}
});
HTTP Request
GET ~/v3/api/auth/player_credentials
HTTP Method | GET |
Path | ~/v3/api/auth/player_credentials |
Required Headers | Content-Type and Authorization |
Grant Type | None |
Response when CAPTCHAs are not mandatory
{
"recaptcha": {
"type": "none"
}
}
Response when CAPTCHAs are mandatory
{
"recaptcha": {
"type": "reCAPTCHAv2",
"siteKey": "6Lf8F68ZAAAAAGzA7ofqztYeMAI5zvx3OnqrMJro"
}
}
HTTP Response
The response is simple JSON object which contains a single captcha
property.
Property | Required? | Type | Description |
---|---|---|---|
catpcha |
Required | CATPCHA Status | The CAPTCHA Status. |
CATPCHA Status
The return captcha
property indicates whether a CAPTCHA token is mandatory for player_credentials
authentication or not.
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | string | none or reCAPTCHAv2 . |
site_key |
Optional* | string | Required if type is set to reCAPTCHAv2 . |
When no CAPTCHAs are required, the
type
property is set tonone
.When CAPTCHAs are mandatory for players to log in, the
type
property is set toreCAPTCHAv2
and asite_key
is provided. In that case, you should use the reCAPTCHA v2 API to obtain the CAPTCHA token mandatory for thePOST ~/v3/api/auth/player_credentials/token
endpoint.
CAPTCHA Token
Example of CAPTCHA Token in request
{
"captcha": {
"type": "reCAPTCHAv2",
"token": "03AGdB…"
}
}
The CAPTCHA Token is used by the login endpoint, the registration endpoint, and the email availability check endpoint.
The CAPTCHA Token object contains the following properties:
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | String | Must be set to reCAPTCHAv2 . |
token |
Required | String | The value of the CAPTCHA token as obtained via the reCAPTCHA v2 API. |
Tracking Context
Example of tracking context created from a persistent cookie:
{
"tracking_id": "6637ebbb-9916-49c8-a8b8-52280c3b1e1d"
}
Example of tracking context created from query parameters:
{
"url": "https://www.example.com?cid=9V147K&mid=22JC0492",
"referrer": "https://casino-referrer.example.com/thebest.html"
}
The TrackingContext
object is used to communicate the user tracking context to the ~/v3/api/auth/{grant_type}/token
endpoints. The provided data is obtained from different sources: persistent browser storage (e.g. cookies), query URL parameters, or through the use of third party libraries. The collected data is then used by the fraud prevention and the affiliate marketing systems.
Property | Required? | Type | Size Range | Description |
---|---|---|---|---|
tracking_id |
Optional* | string | [1..36] | Tracking ID. Received from previous ~/v3/api/auth/{grant_type}/token response. |
url |
Optional* | string | [1..1000]* | Landing URL used to navigate to the Kore enabled site. The query of the URL may contain pixel tracking parameters such as rt , mid , cid , TrackingToken , etc… The url property may be omitted if the URL contains no query parameters. |
referrer |
Optional | string | [1..1000]* | URL of affiliate page that links to casino site. This may be retrieved via the document.referrer property in JavaScript. |
user_agent |
Optional | string | [1..1000]* | User Agent used by the player (navigator.userAgent ). If omitted the API reads the User-Agent header from the request instead. |
Tracking ID persistence policy
The tracking_id
field is populated with the tracking_id
value previously returned by the API.
The tracking_id
should be stored in a long-lived persistent storage mechanism (such as browser cookies) and provided to all subsequent requests to the ~/v3/api/auth/token
endpoint. You must always use the latest version of the tracking_id
returned by the API.
If no tracking_id
is returned, then you must delete the existing id from the persistent storage and stop using it in all future requests to the API.
If the same tracking_id
is returned, the expiration of the storage should not be extended.
The query URL parameter tg
can be injected in the URL. If present, it should take precedence over any tracking_id
you may have previously received and stored. This can be used by Mobile Apps.
Use Cases
Pseudo code: how set up tracking context
1. Set `tracking_id` to `tg` query URL parameter if present.
Otherwise, set `tracking_id` to whatever value (if any)
was stored from previous responses (probably as cookies).
2. Set `url` parameter with the URL of the site. If the URL
contains no query parameters, you may omit it. Typically
this `url` is read from `window.location.href`.
3. Set `referrer` to the page which landed in the casino.
This may be `document.referrer` unless you have internal
redirections on your site.
4. Every time you use the API, update the stored value
of `tracking_id` with what was returned from the API.
If none was returned, delete it.
Here some of the major use cases to consider:
A player lands on the casino site without any tracking parameters in the query string of the URL, and no
tracking_id
was persisted in the browser. In this case, notracking
data is to be sent to the~/v3/api/auth/token
endpoint.A player lands on the casino site, and the URL contains query URL parameters. In this case, a
tracking
object containing theurl
, and optionally thereferrer
parameters is constructed and passed to the~/v3/api/auth/token
endpoint.A
tracking_id
was previously returned by~/v3/api/auth/token
and persisted in the browser. In this case, atracking
object containing thetracking_id
is passed to the~/v3/api/auth/token
endpoint.If you integrate with the Mobile Apps the
tracking_id
may be retrieved by the APp and injected into the query URL by appending atg
parameter to the menu URL. You should parsetg
and populatetracking_id
with the corresponding value.
Activation
{
"activation": {
"code": "8F88577B61D2DE940269B4AB99E1B351",
"expiration": "2022-10-10T20:34:10Z",
"brands": [ "MyCasino", "MyOtherCasino" ],
"reset_password": {
"href": "https://www.casino.com/forgotten_password?email=bob@example.com",
"method": "GET"
},
"password_required": true
}
}
An Activation
object may be returned by some authentication and registration endpoints:
POST ~/v3/api/users
used for players’ registrationsPOST ~/v3/api/auth/player_credentials/token
used for players’ sign-insPOST ~/v3/api/users/emailcheck
used to check whether an email address is available for registration
The Activation
object is returned when a player attempts to create multiple accounts, using the same email address, on different brands belonging to the same brand group.
The returning activation code
can be passed to the activation endpoint to activate the existing account with another brand that belong to the same brand group.
Property | Required? | Type | Description |
---|---|---|---|
code |
Required | string | A random activation code. |
expiration |
Required | string | Expiration date for the activation code .It uses ISO 8601 format yyyy-mm-ddThh:mm:ssZ |
brands |
Required | array of strings | List of brands with which the player already has an account. No specific order. The array cannot be empty. |
password_required |
Required | boolean | Indicates whether the activation endpoint requires the player’s password or not. |
reset_password |
Required | Link | A link to the password forgotten recovery page. Uses the first brand from the brands array. |
Locales
Kore locale
codes use IETF language tags specified in RFC 5645 and RFC 4647.
Currently only the following restricted values are accepted by the Kore API:
Code | Description |
---|---|
en-US |
English as used in United States |
en-ZA |
English as used in South Africa |
fr-FR |
French as used in France |
de-DE |
German as used in Germany |
it-IT |
Italian as used in Italy |
es-ES |
Spain as used in Spain |
el-GR |
Modern Greek as used in Greece |
da-DK |
Danish as used in Denmark |
sv-SE |
Swedish as used in Sweden |
nb-NO |
Norwegian Bokmål as used in Norway |
Users
Get Unregistered Users Links
This endpoint can be used to retrieve links to resources that apply to all players, whether they are registered or not.
GET ~/v3/api/users
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {brand_token}" \
"http://example.com/v3/api/users"
$.ajax({
"url": "http://example.com/v3/api/users",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {brand_token}"
}
});
Response:
{
"_actions": {
"register": {
"href": "https://example-webapps-saucify7.aristx.net/public/RegisterUser.aspx?ClientType=Web&Brand=example&Locale=en-US&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"reset_password": {
"href": "https://example-webapps-saucify7.aristx.net/account/ForgottenPassword.aspx?ClientType=Web&Locale=en-US&Brand=example&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"help_chat": {
"href": "https://example-webapps-saucify7.aristx.net/public/Chat.aspx?ReturnUrl=http%3A%2F%2Fwww.google.com&SkillGroup=support@example.com&Locale=en-US&Context=WebClient"
}
},
"_links": {
"register": {
"href": "https://example.com/v3/api/users",
"method": "POST"
}
}
}
HTTP Request
GET ~/v3/api/users
HTTP Method | GET |
Path | ~/v3/api/users |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
HTTP Response
This endpoint returns register
and reset_password
action links.
Property | Required? | Type | Description |
---|---|---|---|
_actions |
Required | LinkCollection | User actions. |
_links |
Optional | LinkCollection | Downloadable resources. |
Actions
Action | Required? | Description |
---|---|---|
register |
Required | Link to a web page where the registration process can occur. |
reset_password |
Required | Link to a web page where the user can reset a forgotten password. |
help_chat |
Required | Link to the chat page as a guest user. It is recommended you open this link in a new page. |
Links
Link | Required? | Description |
---|---|---|
register |
Mandatory | Link to the registration API endpoint. |
download_apk |
Optional | Link to Android APK file. This includes affiliate tracking. |
download_app_store |
Optional | Link to iOS App Store. This includes affiliate tracking. |
Create User Account
This endpoint can be used to create a new player and automatically log in as the player.
POST ~/v3/api/users
curl --request POST 'http://example.com/v3/api/users' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_type": "player",
"affiliate_tag": "MyUserTag"
"email": "bob@example.com",
"password": "BatteryStappleHorse",
"play_mode": "Real",
"currency": "USD",
"device_id": "W4TifY3XvBP2ZftnrKZo",
"player_info": {
"firstname": "Bob",
"lastname": "Marley",
"nickname": "Tuff Gong",
"birth_date": "1945-02-06",
"mobile_phone": "+1 1234 654987",
"home_phone": "+1 1234 654987",
"work_phone": "+1 1234 654987",
"title": "Mr.",
"address": {
"first_line": "999 Sunse Blvd",
"second_line": "Apt 23. Bldg B.",
"city": "West Columbia",
"zip_code": "29169",
"state_code": "SC",
"country_code": "US"
}
}
}'
var payload = {
user_type: "player",
affiliate_tag: "MyUserTag",
email: "bob@example.com",
password: "BatteryStappleHorse",
play_mode: "Real",
currency: "USD",
device_id: "W4TifY3XvBP2ZftnrKZo",
player_info: {
firstname: "Bob",
lastname: "Marley",
nickname: "Tuff Gong",
birth_date: "1945-02-06",
mobile_phone: "+1 1234 654987",
home_phone: "+1 1234 654987",
work_phone: "+1 1234 654987",
title: "Mr.",
address: {
first_line: "999 Sunse Blvd",
second_line: "Apt 23. Bldg B.",
city: "West Columbia",
zip_code: "29169",
state_code: "SC",
country_code: "US"
}
}
}
$.ajax({
"url": "http://example.com/v3/api/users",
"method": "POST",
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com/",
"Authorization" : "Bearer {brand_public_credentials_token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
Fast track registration using code
curl --request POST 'http://example.com/v3/api/users' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_type": "player",
"affiliate_tag": "MyUserTag"
"email": "bob@example.com",
"password": "BatteryStappleHorse",
"play_mode": "Real",
"device_id": "W4TifY3XvBP2ZftnrKZo",
"fast_track_registration_code": "ftr8F88577B61D2DE940269B4AB99E1B351"
}'
var payload = {
user_type: "player",
affiliate_tag: "MyUserTag",
email: "bob@example.com",
password: "BatteryStappleHorse",
play_mode: "Real",
device_id: "W4TifY3XvBP2ZftnrKZo",
fast_track_registration_code: "ftr8F88577B61D2DE940269B4AB99E1B351"
}
$.ajax({
"url": "http://example.com/v3/api/users",
"method": "POST",
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com/",
"Authorization" : "Bearer {brand_public_credentials_token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
HTTP Request
POST ~/v3/api/users
HTTP Method | POST |
Path | ~/v3/api/users |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
user_type |
Mandatory | String | N/A | Must be set to player . |
email |
Mandatory | String | 254 | The user’s email address as defined in section 3.4.1 of RFC-5322. Unicode characters are not supported. You must use Punycode encoding if necessary. |
password |
Mandatory | String | 20 | The password of the account. The minimum size is 8 characters. |
play_mode |
Mandatory | String | N/A | Either Real or Practice . This is used to perform the login if the registration is successful. |
currency |
Mandatory† | String | 6 | A valid currency code. The list can be retrieved from the GET ~/v3/api/currencies endpoint. |
captcha |
Optional* | CAPTCHA Token | N/A | The CAPTCHA token is usually not required unless a captcha_required error is returned and the CAPTCHA Status marks CAPTCHA tokens as mandatory. |
player_info |
Mandatory† | PlayerInfo | N/A | Object containing additional information about the player. |
ip |
Optional | String | 15 | IPv4 address of the client in numerical format x.x.x.x . If omitted the IP address of the connection to the API is used instead. |
device_id |
Optional | String | 20 | This value corresponds to the visitorId returned by the FingerprintJS Pro API.Non fatal validation is used. |
affiliate_tag |
Optional | String | 128 | ASCII Only. Name of an affiliate tag to automatically apply to the player’s account. No longer needed; see comment below. |
fast_track_ registration_code |
Optional† | String | 128 | Special code returned by the email availability check endpoint. When the code is used, the currency , player_info , and nickname properties are optional. Any properties in the request overrides the ones from the code. |
welcome |
Optional | Welcome | N/A | Object containing additional information about the welcome pages. Non fatal validation is used. |
Player Info
Minimal
player_info
object
{
"nickname": "ASCII_16_len_max"
}
Full
player_info
{
"firstname": "Scrooge",
"lastname": "McDuck",
"nickname": "Uncle Scrooge",
"birth_date": "1947-12-15",
"mobile_phone": "+44 7701 900 123",
"home_phone": "+44 141 496 1010",
"work_phone": "+44 141 496 9999",
"title": "Mr.",
"address": {
"first_line": "McDuck Castle",
"second_line": "Rannoch Station",
"city": "Highland Perthshire",
"zip_code": "PH17 2QA",
"state_text": "Scotland",
"country_code": "GB"
},
"identification": {
"country": "ZA",
"type": "Id",
"number": "8801235111088"
},
"fund_source": "Pension"
}
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
nickname |
Optional | String | 16 | The nickname of the player as shown in tournaments and competitions. Not required for fast track registration. |
firstname |
Optional | String | 50 | The first name of the player. |
lastname |
Optional | String | 50 | The last name of the player. |
title |
Optional | String | 50 | The title of the player, which should prefix the name, such as Mr. , Mrs. , Ms. . It is up to the API client to decide which titles are appropriate. |
birth_date |
Optional | String | N/A | Date of birth of the player in yyyy-mm-dd format. |
home_phone |
Optional | String | 50 | Home telephone number in E.164 format. |
work_phone |
Optional | String | 50 | Work telephone number in E.164 format. |
mobile_phone |
Optional‡ | String | 50 | Mobile telephone number in E.164 format. |
address |
Optional | Address | N/A | The home address of the player. |
identification |
Optional‡ | Identification | N/A | The identification document number of the player. |
fund_source |
Optional | String | 50 | A valid Identification type. Following are the string enums supported: Salary , SelfEmployed , Inheritance , Savings , InvestmentIncome , Pension . |
Address
Valid
state_code
values for US
"AK", "AL", "AR", "AS", "AZ", "CA", "CO", "CT", "DC", "DE",
"FL", "FM", "GA", "GU", "HI", "IA", "ID", "IL", "IN", "KS",
"KY", "LA", "MA", "MD", "ME", "MH", "MI", "MN", "MO", "MP",
"MS", "MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY",
"OH", "OK", "OR", "PA", "PR", "PW", "RI", "SC", "SD", "TN",
"TX", "UT", "VA", "VI", "VT", "WA", "WI", "WV", "WY"
Valid
state_code
values for AU
"ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA"
Valid
state_code
values for CA
"AB", "BC", "MB", "NB", "NL", "NS", "NT", "NU",
"ON", "PE", "QC", "SK", "YT"
Valid
state_code
values for ZA
"EC", "FS", "GP", "KZN", "LP", "MP", "NC", "NW", "WC"
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
first_line |
Optional | String | 50 | First line of the postal address. |
second_line |
Optional | String | 50 | Second line of the postal address. |
city |
Optional | String | 50 | Name of the town or city. |
zip_code |
Optional | String | 50 | ZIP Code or Post Code. |
country_code |
Mandatory | String | 2 | A valid ISO_3166-1_alpha-2 country code. Uppercase. |
state_code |
Optional | String | 3 | A valid state or province code. Uppercase. Only applies to US , CA , AU an ZA . The codes follow respectively the standards from USPS, Canada Post, Australia Post (see last page) and ISO_3166-2:ZA. |
state_text |
Optional | String | 50 | A textual description of the state or province. This field should be used for other countries than US , CA and AU , or for special cases where the normal state_code abbreviations cannot be used. |
Identification
Valid SA ID for a person born on 1990-07-14
{
"country": "ZA",
"type": "Id",
"number": "9007141234084"
}
Valid Passport ID for a person
{
"country": "IN",
"type": "Passport",
"number": "L1558624"
}
Example of Follow response
{
"_actions": {
"follow": {
"href": "https://webapps.example.com/public/UserActivation.aspx?ReturnUrl=http%3A%2F%2Fwww.example.com&ClientType=Web&Brand=CasinoBrand&Locale=en-US&Email=bob@example.com",
"method": "GET"
}
},
"activation": {
"code": "8F88577B61D2DE940269B4AB99E1B351",
"expiration": "2022-10-10T20:34:10Z",
"brands": [
"GrandEagle",
"MandarinPalace",
"TreasureMile"
],
"reset_password": {
"href": "https://GrandEaglecasino-webapps-saucify3.aristx.net/account/ForgottenPassword.aspx?ClientType=Web&Locale=en-US&Brand=GrandEagle&ReturnUrl=https%3A%2F%2Fdemo-kore3.aristx-external.net%2FLuckyCreek",
"method": "GET"
},
"password_required": true
}
}
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
country |
Mandatory | String | 2 | A valid ISO_3166-1_alpha-2 country code. Uppercase. For SA ID, Only ZA is currently supported. For Passport, all countries are allowed. |
type |
Mandatory | String | 50 | A valid Identification type. Only Id and Passport are currently supported. |
number |
Mandatory | String | 13 | Identification number of the ID document. Type ID is valid for only SA ID number following the South African specifications. Alternative documentation. If the document is Passport it must be in alphanumeric character with following regex: ^[A-Z0-9]{6,13}$ |
HTTP Responses
Example of Success response
{
"registration_status": "Success",
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-11-19T18:00:12Z",
"value": "CfDJ8A9gjaMNK1FDsBTJEa5WnXS/pAcE48Sr+UhE3wqGnL7o7LJdsU0LoPqzXBy1ayYB5SHpV5sHWMsdSr/4NlrnQS9MzEgP9T4abgSeJ6NV55Ux8pFY09GADdobZjJW1CcmzetKt9gREMJVjunXrLJ6eALyfO/W16ur27v59Eb7e2Wu3BajGWDmrhilZltx3jFnipoWp0oP1jlskm4aniZnP6azK+uvUbUReZiEyzS7tElMycB9u0qLVN0TYPb3f8vwX2NYGYTuC2fj/JgiufBmzQyvMzuhPgWi9i6DHGtNgFREo2yS/jn3nwYnF+A0lTpnaSsxMHv1KVfEV8KN47NlHh0t2y7q1gjIvRv6lXRmZ3rXHrTiH51sMLSVNmbSqZsj/ktApHVKlstyCMV4WiMVUsLcbTDXQeNy89En99gJNmMY7ut5D8M/1iTJ7M2E0Pi16TypeI+NTQjvhg//kS4I4PneumKHUFhZzbO7XETi0u5oRap4sgJ+YBEjPYsUq7AEONct3Bai4SQMwkZvj9CpkXVyCyppix4BSiKlTX6vKlZl+jiYyykCXQKvHyD5KNC36Q=="
}
],
"_links": {
"user": {
"href": "https://example.com/v3/api/users/MzU3aXZQakV5Z2Q3WnRIZ285dW9hOWRrbG4vbk5RPT0.",
"method": "GET"
},
"logout": {
"href": "https://example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US"
}
}
Example of
MobilePhoneVerificationRequired
response
{
"registration_status": "MobilePhoneVerificationRequired",
"auth": {
"grant_type": "player_verification_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-03-07T09:37:11Z",
"value": "CfDJ8FheFtoFfxRIrg3qiACFurFtsmiA4vu1tfmJmBOWgIoikbFt52rk6RFvNulR5Hmbz5v5kVJyAYt4m0cp592uQYkXZ1LPt3DmJg+Bs4ttxWjr6D+kGocmV412LaPdWTCBBp57jLXjgYvRbKKD+n19rhh3BrNU6IA9t5HY4RCgrs/sCv5D4BcC3aeFekDprXKaYGe5oMOw8J/6lf/TZ3wX6m3RmkqZxAFWmfg59EECEKB4nBuCrqm2fvD3xjzi3O73SRcon8LRbUwM/Nys+RwKTSsdPtAxlTI7Z0KAmjbtz66q0eyX/M585d7ojKnSZPKyXgmnrMS0pIJ3bN4HVj7jG7u+vKdFRC6af7DTLT1xAsLRutYQMUCjTmHEYk6rmHnCYSAXgsjiuHYI/WWizntN9551O6+n/tSqx7Vg7XDrX6NtTj8bS8jzX40LNcNguMVoGeXqBrqg2V5ZDrThH/55DaaKS9YVP0TQCZ0Cu9VuAjQmCdq+lWEq6uaUkJoIb9wKlnkCvs9F9m1AvsubfRGdJWPAQq9dr2E66712QTJD0NkILwmaqm3JmaF5C35QZbuH0OP/+mWCTRVLACvsquZ2MiU="
}
],
"tracking_id": "37e22704-39c5-4662-a4a6-48c0f15a3437",
"_links": {
"verification": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0./verification",
"method": "POST"
},
"verification_retry": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0./verification/retry",
"method": "POST"
}
},
"locale": "en-US",
"email": "bob@example.com",
"registration_status": "HardSmsVerificationRequired"
}
}
Example of
MissingPlayerInfo
response
{
"registration_status": "MissingPlayerInfo",
"auth": {
"grant_type": "extra_player_info",
"missing_player_info": ["Address"],
"locale": "en-US"
"tokens": [
{
"type": "Bearer",
"expiration": "2020-11-19T18:00:12Z",
"value": "CfDJ8A9gjaMNK1FDsBTJEa5WnXS/pAcE48Sr+UhE3wqGnL7o7LJdsU0LoPqzXBy1ayYB5SHpV5sHWMsdSr/4NlrnQS9MzEgP9T4abgSeJ6NV55Ux8pFY09GADdobZjJW1CcmzetKt9gREMJVjunXrLJ6eALyfO/W16ur27v59Eb7e2Wu3BajGWDmrhilZltx3jFnipoWp0oP1jlskm4aniZnP6azK+uvUbUReZiEyzS7tElMycB9u0qLVN0TYPb3f8vwX2NYGYTuC2fj/JgiufBmzQyvMzuhPgWi9i6DHGtNgFREo2yS/jn3nwYnF+A0lTpnaSsxMHv1KVfEV8KN47NlHh0t2y7q1gjIvRv6lXRmZ3rXHrTiH51sMLSVNmbSqZsj/ktApHVKlstyCMV4WiMVUsLcbTDXQeNy89En99gJNmMY7ut5D8M/1iTJ7M2E0Pi16TypeI+NTQjvhg//kS4I4PneumKHUFhZzbO7XETi0u5oRap4sgJ+YBEjPYsUq7AEONct3Bai4SQMwkZvj9CpkXVyCyppix4BSiKlTX6vKlZl+jiYyykCXQKvHyD5KNC36Q=="
}
],
"_links": {
"amend_user": {
"href": "https://example.com/v3/api/users/MzU3aXZQakV5Z2Q3WnRIZ285dW9hOWRrbG4vbk5RPT0.",
"method": "PATCH"
}
}
}
}
There are two types of responses possible from the API:
- A response containing a
follow
action link to a web page with a status code of200
. This page would be shown if further action is required to set up the player’s account. This is typically the case if the player has already opened an account with another brand from the same group.
Property | Required? | Type | Description |
---|---|---|---|
_actions |
Required | LinkCollection | A link collection containing a follow action. |
activation |
Optional | Activation object |
The activation object may be returned along side some follow actions. |
- A response a status of
201
and aLocation
header set to the user information endpoint, which returns the following properties in the body:
Property | Required? | Type | Description |
---|---|---|---|
registration_status |
Mandatory | String | The values may be Success , AccountUnderReview , MissingPlayerInfo , EmailVerificationRequired or HardSmsVerificationRequired . |
auth |
Optional | PlayerTokenResponse |
The same object that is returned from the login endpoint. |
errors |
Optional | Array of errors | Returned if a non fatal error has occurred. |
Check Email Availability
This endpoint is used to check the availability of an email address.
It is typically used in conjunction with the create user account endpoint.
POST ~/v3/api/users/emailcheck
curl --request POST 'http://example.com/v3/api/users/emailcheck' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"mode": "simple_check",
"email": "bob@example.com",
}'
var payload = {
email: "bob@example.com",
mode: "simple_check"
}
$.ajax({
"url": "http://example.com/v3/api/users/emailcheck",
"method": "POST",
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com/",
"Authorization" : "Bearer {brand_public_credentials_token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
HTTP Request
POST ~/v3/api/users/emailcheck
HTTP Method | POST |
Path | ~/v3/api/users/emailcheck |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
Rate Limits | 20 requests per minute; 100 requests per 10 minutes; 300 requests per hour |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
mode |
Optional* | String | N/A | Either simple_check , fast_track_registration or campaign_list_check . If it is not provided, it defaults to simple_check . |
email |
Mandatory | String | 254 | The user’s email address as defined in section 3.4.1 of RFC-5322. Unicode characters are not supported. You must use Punycode encoding if necessary. |
captcha |
Optional* | CAPCHA Token | N/A | The CAPTCHA token. This is only required when the API is under attack. |
campaign_id |
Optional* | Number | N/A | A positive integer greater than zero that identifies the campaign list to check against. This is required if mode is campaign_list_check . |
HTTP Responses
Example of simple response with available offer
{
"status": "not_available",
"available_offers": [
{ "offer_code": "75free" }
],
"claimed_offers": [
{ "offer_code": "50free", "claim_date": "2022-10-10T20:34:10Z" }
]
}
Example of activation response
{
"status": "activate",
"activation": {
"code": "8F88577B61D2DE940269B4AB99E1B351",
"expiration": "2022-10-10T20:34:10Z",
"brands": [
"GrandEagle",
"MandarinPalace",
"TreasureMile"
],
"reset_password": {
"href": "https://GrandEaglecasino-webapps-saucify3.aristx.net/account/ForgottenPassword.aspx?ClientType=Web&Locale=en-US&Brand=GrandEagle&ReturnUrl=https%3A%2F%2Fdemo-kore3.aristx-external.net%2FLuckyCreek",
"method": "GET"
},
"password_required": true
}
}
Example of fast_track_registration response
{
"status": "fast_track_registration",
"fast_track_registration": {
"code": "ftr8F88577B61D2DE940269B4AB99E1B351",
"expiration": "2022-10-10T20:34:10Z"
},
"available_offers": [
{ "offer_code": "75free" }
]
}
In case of success, the response indicates whether the email address is available or not. This endpoint may also return an Activation
object if the player account exists with another brand from the same brand group.
Property | Required? | Type | Description |
---|---|---|---|
status |
Required | string | Either not_available , available , activate or fast_track_registration . If campaign check mode is used, then not-eligible is returned rather than available and eligible replaces not-available . |
available_offers |
Optional | Array of Offers | The endpoint returns either nothing or an empty array when no offers are available. Otherwise it returns an array of available cash offers. |
claimed_offers |
Optional | Array of Claimed Offers | The list of cash offers claimed by the player in no specific order. Claimed offers ephemeral and may be removed in the future. When no offers have been claimed the array may be omitted or may be empty. |
activation |
Optional* | Activation object |
The activation object is only returned if the status is set to activate . |
fast_track_registration |
Optional* | Fast Track Registration object | The fast track registration info. This is only returned if mode was set to fast_track_registration . |
Offer
Property | Required? | Type | Description |
---|---|---|---|
offer_code |
Required | string | An internal identifier specific to the cash offer. |
Fast Track Registration Object
Property | Required? | Type | Description |
---|---|---|---|
code |
Required | string | The returned code can be used for player registration. |
expiration |
Required | string | Expiration date for the registration code .It uses ISO 8601 format yyyy-mm-ddThh:mm:ssZ and set to UTC time zone. |
Get User Information
This endpoint can be used to retrieve information that applies to the currently logged in player.
The following information can be retrieved:
- The current balance
- List of different web application pages (cashier, playback, etc…)
- Information about the player (names, locale, etc…)
GET ~/v3/api/users/{user_id}
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
HTTP Request
GET ~/v3/api/users/{user_id}
HTTP Method | GET |
Path | ~/v3/api/users/{user_id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
HTTP Response
Response:
{
"balance": {
"currency": "XXX",
"amount" : 71820,
"exponent" : 2
},
"email": "bob@bob.com",
"firstname": "Bob",
"lastname": "The Builder",
"user_token": "cUrZ7y94jP78S1RR9CeFNgp9zAce5A==",
"nickname": "Bob The Builder",
"locale": "en-US",
"play_mode": "Practice",
"birth_date": "1984-01-01",
"registration_date": "2014-01-09T12:16:17Z",
"profile": "Unverified",
"has_deposited": true,
"verification_status": {
"email": "Unverified",
"mobile_phone": "Verified"
},
"claimed_offers": [
{
"offer_code": "75free",
"claim_date": "2022-10-18T08:56:00Z"
}
],
"_actions": {
"account_details": { "href": "http://www.example.com/account_details" },
"account_playback": { "href": "http://www.example.com/account_playback" },
"account_change_password": { "href": "http://www.example.com/account_change_password" },
"account_competitions": { "href": "http://www.example.com/account_competitions" },
"cashier_deposit": { "href": "http://www.example.com/cashier_deposit" },
"cashier_withdrawal": { "href": "http://www.example.com/cashier_withdrawal" }
},
"_links": {
"statistics": { "href": "http://www.example.com/v3/api/users/{userid}/stats" },
"email_status": { "href": "http://www.example.com/v3/api/users/{userid}/email_status" },
"tags": { "href": "http://www.example.com/v3/api/users/{userid}/tags" },
"custom": { "href": "http://www.example.com/v3/api/users/{userid}/custom" },
"verification" :{"href": "http://www.example.com/v3/api/users/{userid}/verification"},
"verification_retry" :{"href": "http://www.example.com/v3/api/users/{userid}/verification/retry"},
"player_day" :{"href": "http://www.example.com/v3/api/users/{userid}/player_day"}
}
}
Property | Required? | Type | Description |
---|---|---|---|
balance |
Required | Money | Balance of the user. When play_mode is Practice this is the sum of bonus and cash balances. |
cash_balance |
Optional | Money | Cash balance of the user. Only available when play_mode is Real . |
bonus_balance |
Optional | Money | Bonus balance of the user. Only available when play_mode is Real . |
email |
Required | String | User’s email. |
firstname |
Optional* | String | User’s first name. |
lastname |
Optional* | String | User’s last name. |
user_token |
Required | String | The user_token is a string composed of 32 ASCII characters that provides a unique and immutable identifier for the player. The user_token is not shared across brands. |
nickname |
Required | String | User’s nickname. |
locale |
Required | String | Locale used to log in. |
loyalty |
Optional | Loyalty | Loyalty object. Only available when play_mode is Real and the player is a member of a loyalty scheme. |
play_mode |
Required | String | User’s play_mode. Either Practice or Real . |
birth_date |
Optional* | String | Birth date of the user (yyyy-mm-dd ). |
profile |
Required | String | User’s profile type. Can be EuroUnverified ,LowRoller , Restricted , Test , Unverified , Verified or VIP . |
verification_status |
Required | VerificationStatus | Provide information about whether the mobile phone and the email address of the player have been verified. |
registration_date |
Required | String | Date of registration as an ISO 8601 UTC Date (yyyy-mm-ddThh:mm:ssZ ). |
has_deposited |
Required | Boolean | true if the player has made at least one deposit since the account was created. Deposits for other brands in the same brand group are not considered. |
claimed_offers |
Optional | Array of Claimed Offers | The list of cash offers claimed by the player in no specific order. Claimed offers ephemeral and may be removed in the future. When no offers have been claimed the array may be omitted or may be empty. |
_actions |
Required | LinkCollection | Collection of available actions for the player. |
_links |
Required | LinkCollection | Collection of API links for the player. |
Claimed Offer
Action | Required? | Type | Description |
---|---|---|---|
offer_code |
Required | string | An internal identifier specific to the cash offer. |
claim_date |
Required | string | ISO 8601 UTC timestamp in format yyyy-mm-ddThh:mm:ssZ . This is the date when the offer was last claimed. |
Links
Action | Required? | Description |
---|---|---|
statistics |
Required | Link to ~/v3/api/users/{userid}/stats which provides access to player’s statistics. |
email_status |
Required | Link to ~/v3/api/users/{userid}/email_status which provides access to player’s email delivery status. |
tags |
Required | Link to ~/v3/api/users/{userid}/tags to access player’s tags. Please note the categories query parameter must be added. |
custom |
Required | Link to ~/v3/api/users/{userid}/custom to access player’s custom information. |
verification |
Required | Link to ~/v3/api/users/{userid}/verification to enter a SMS verification code received by the player on a mobile phone. |
verification_retry |
Required | Link to ~/v3/api/users/{userid}/verification/retry to request for an SMS verification code to be sent to the player. |
player_day |
Required | Link to ~/v3/api/users/{userid}/player_day to access player’s bets and deposit information. Please note the date query parameter must be added. |
Actions
Example of available Actions for a user using Real money mode.
"_actions": {
"account_details": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=UserAccount&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=UserDetails&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"account_playback": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=UserAccount&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Playback&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"account_change_password": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=UserAccount&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=ChangePassword&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"account_competitions": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=UserAccount&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Competitions&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_deposit": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Deposit&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_withdrawal": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Withdrawal&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_withdrawal_reverse": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=WithdrawalReverse&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_bonus": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Bonus&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_loyalty": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Loyalty&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_statement": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Statement&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"cashier_transfer": {
"href": "http://www.example.com/public/AutomatedWebLogin.aspx?App=Cashier&ClientType=Web&Brand=JumbaBet&Locale=en-US&Section=Transfer&Login=bob@example.com&PlayMode=Real&SessionID=usUDL%2FTkTmG0jfnYZtLBxoD1sarH1NuqeUon01mWWMg%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com"
},
"help_chat": {
"href": "https://www.example.com/public/Chat.aspx?SessionID=3TeX571JeERiIB7uSFkOv7s4s2vaIMWppw9q9l5fgH0%3D&UserToken=g93ALDTNj5VBKJdzdixWSjUYoASv8Q%3D%3D&ReturnUrl=http%3A%2F%2Fwww.google.com&SkillGroup=support@example.com&Locale=en-US&Context=WebClient"
}
}
Some actions are only available in Real money mode, i.e. when the play_mode
parameter passed to the ~/v3/api/auth/token
endpoint is set to Real
.
Action | Required? | Description |
---|---|---|
account_details |
Required | Link to the page where the user can edit name and address details. |
account_playback |
Required | Link to the playback page, to see previously played game rounds. |
account_change_password |
Required | Link to page to change the password. |
account_competitions |
Required | Link to page about current competitions. |
cashier_deposit |
Required | Link to the page to do deposits. In practice mode this link is for depositing practice funds only. |
cashier_withdrawal |
Required | Link to the page to withdraw money. In practice mode this link is for withdrawing practice funds only. |
help_chat |
Required | Link to the chat page as a logged-in user. It is recommended you open this link in a new page. |
cashier_withdrawal_reverse |
Optional | Real play mode only. Link to the page used to reverse pending withdrawals. |
cashier_bonus |
Optional | Real play mode only. Link to a page to review active or pending bonuses or claim new ones. |
cashier_loyalty |
Optional | Real play mode only. Link to the loyalty program page. |
cashier_statement |
Optional | Real play mode only. Link to the page listing all transactions. |
cashier_transfer |
Optional | Real play mode only. Link to the page used to transfer funs between casinos from the same group. |
Get User Statistics
This endpoint can be used to retrieve different types of user statistics.
The following information can be retrieved:
- The player’s highest win
- Information about the last tournaments played.
- Information about the last competitions the played participated in.
HTTP Request
GET ~/v3/api/users/{user_id}/stats
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}/stats"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/stats",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
GET ~/v3/api/users/{user_id}/stats
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/stats |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
HTTP Response
Response:
{
"highest_win": {
"payout": {
"currency": "USD",
"amount": 11750,
"exponent": 2
},
"game": {
"provider": "saucify",
"slug": "spartians-video-slot",
"name": "Spartians",
"locale": "en-US",
"category": "videoslots",
"platform": "html",
"attributes": {
"lines": "30",
"free_spins": "true"
},
"_actions": {
"play": {
"href": "http://www.example.com/play?token=...",
"method": "GET"
}
},
"_links": {
"_self": {
"href": "http://www.example.com/v3/api/games/Html/SpartiansVideoSlot",
"method": "GET"
}
}
}
},
"tournaments": [
{
"win_amount": {
"currency": "USD",
"amount": 15000,
"exponent": 2
},
"name": "Fun Tournament 2",
"rank": 1,
"end_date": "2019-03-26T15:54:04Z",
"start_date": "2019-03-26T15:48:55Z"
},
{
"name": "Fun Tournament",
"rank": 2,
"end_date": "2019-03-26T15:40:26Z",
"start_date": "2019-03-26T15:35:18Z"
}
],
"competitions": [
{
"name": "Fun Competition",
"rank": 2,
"end_date": "2019-03-26T16:15:00Z",
"start_date": "2019-03-26T16:07:00Z"
}
]
}
Property | Required? | Type | Description |
---|---|---|---|
highest_win |
Optional | HighestWin | Highest ever win for the player. Omitted for new players that have not yet won anything. |
tournaments |
Required | Array of TournamentStats | List of tournament statistics. The array may be empty or contain at most the statistics for the last 10 completed tournaments in descending chronological order. |
competitions |
Required | Array of CompetitionStats | List of competition statistics. The array may be empty or contain at most the statistics for the last 10 completed competitions in descending chronological order. |
Get Email Delivery Status
HTTP Request
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}/email_status"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/email_status",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
GET ~/v3/api/users/{user_id}/email_status
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/email_status |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
HTTP Response
Response:
{
"email_status": {
"is_casino_subscribed": true,
"is_group_subscribed": false,
"is_blocked": true,
"blocked_until": "2019-02-20T16:55:12Z",
"last_sent": "2019-02-20T12:55:12Z",
"last_tracked": "2019-02-15T12:45:42Z"
}
}
Property | Required? | Type | Description |
---|---|---|---|
is_blocked |
Required | boolean | Indicate that the player’s email is currently blocked. Emails get blocked when the player’s receiving email server bounces an email. |
is_casino_subscribed |
Required | boolean | Indicate whether the player is subscribed to receive promotional emails from the casino. Players can unsubscribed using links provided in emails. They can also be unsubscribed by the operator using back office tools. |
is_group_subscribed |
Required | boolean | Indicate whether the player is subscribed to receive promotional emails from the brand group. Players can unsubscribed using links provided in emails. They can also be unsubscribed by the operator using back office tools. |
blocked_until |
Optional | string | Date and time until the system shall attempt to send emails to the player again. It uses ISO 8601 format (yyyy-mmddThh:mm:ssZ ). A year value of 9999 indicates that the player’s email address has been permanently blocked. The blocked_until property is present only if is_blocked is set to true . |
last_sent |
Optional | string | Date and time of the last email sent by the system (but not necessarily received or opened). It uses ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). |
last_tracked |
Optional | string | Date and time of the last email opened by the player using ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). If last_tracked is absent the email may have been received with an email client that prevents tracking. |
Get User Tags
This endpoint retrieves the list of tags associated to the player’s account.
HTTP Request
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}/tags?categories={cat1},{cat2}"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/tags?categories={cat1},{cat2}",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
GET ~/v3/api/users/{user_id}/tags?categories={cat1},{cat2}
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/tags?categories={cat1},{cat2} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
categories |
Required | string | Comma separated list of Tag Categories. Cannot be empty. |
Example of query
?categories=PlayerRanking,FlowTask,DepositProcessorType,LoyaltyTier,BrandGroup
The list of all Tag Categories is: PlayerRanking
, CampaignTracker
, InviteList
, Internal
, FlowTask
, Branding
, InviteSource
, DepositProcessorType
, LoyaltyTier
, BrandGroup
, Promotions
, AffiliateProgram
, BrandPlayerProfile
, RevenueCampaign
, UserSettings
, CampaignTags
, Affiliate
Response:
{
"tags": [
{
"name": "BrandGroup_Thrills",
"category": "BrandGroup"
},
{
"name": "CryptoThrillsCasino_Unverified",
"category": "Branding"
},
{
"name": "DepositAllowed",
"category": "DepositProcessorType"
},
{
"name": "DepositEnabled",
"category": "DepositProcessorType"
},
{
"name": "DepositTrusted",
"category": "DepositProcessorType"
},
{
"name": "ThrillsNovice",
"category": "LoyaltyTier"
}
]
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
tags |
Required | Array of UserTag |
The array may be empty if no tags are associated to the player. There are no guarantees about the order. |
The UserTag
object is defined as follows
Property | Required? | Type | Description |
---|---|---|---|
name |
Required | string | The name of the tag. |
category |
Required | string | The category of the tag. This must be one of the categories provided in the request. |
Get Custom User Info
This endpoint executes an operator defined dbo.pGetUserCustomInfo
stored procedure and serializes the response as JSON.
HTTP Request
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}/custom"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/custom",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
GET ~/v3/api/users/{user_id}/custom
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/custom |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Example of stored procedure
CREATE PROCEDURE dbo.pGetUserCustomInfo
@UserToken CHAR(32)
AS
SELECT so.SignOnID, so.Nickname, so.UpdatedDate, so.IsLocked
FROM tUser u
INNER JOIN tSignOn so ON so.SignOnID = u.SignOnID
WHERE Token = @UserToken
GO
GRANT EXECUTE ON dbo.pGetUserCustomInfo TO KoreServer;
Stored Procedure Requirements
The stored procedure shall be named dbo.pGetUserCustomInfo
. It can return any arbitrary information as long as it meets the following requirements:
pGetUserCustomInfo
accepts a single input parameter named@UserToken
of typeCHAR(32)
. The value is derived from theuser_id
value present in the URL path. The@UserToken
should match theToken
column in thetUser
table. It represents the user from which the custom information is requested by the API.pGetUserCustomInfo
returns a single result set. The result set may be empty. Each column in the result set must have a name. Column names must be unique, i.e. we cannot have two columns with the same name.The result set only contains supported SQL data types. See below for details.
No other input or output parameters.
No return values.
The stored procedure is executable by the
KoreServer
user (GRANT EXECUTE
).
Typically, we expect the stored procedure to return a single row that matches the {user-id}
provided in the request. Nevertheless, the Kore API also supports result sets with multiple rows.
Response:
{
"result": [
{
"sign_on_id": 4565,
"nickname": "bob",
"updated_date": "2018-12-31T15:48:47.757",
"is_locked": false
}
]
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
result |
Required | Array of JSON Objects | Rows returned by pGetUserCustomInfo |
The result
array contains the same rows returned by the pGetUserCustomInfo
stored procedure, in the same order. It may be empty if the stored procedure does not return anything.
Each row in the result set is serialized, in order, as an individual JSON object. The properties of the JSON object are derived from the column names but transformed to abide to the snake_case naming convention.
SQL Column Name (SELECT) | JSON Property Name |
---|---|
UserID |
user_id |
ThirdPartyID |
third_party_id |
Nickname |
nickname |
Mixed_Case |
mixed_case |
Most SQL data types are supported and serialized as follows:
SQL Type | JSON Type |
---|---|
bit |
boolean |
Any other numeric types (int , tinyint , decimal , float , etc…) |
number |
String Types (char , text , nchar , etc…) |
string |
XML | string |
time |
string using hh:mm:ss.ssss or hh:mm:ss format |
date , datetimeoffset , datetime2 , smalldatetime , datetime |
string using ISO 8601 format (see comments) |
binary , varbinary |
string using Base64 encoding |
Any other types | Unsupported – Do not use |
Get Player Day
This endpoint retrieves bet details and deposit information for the player’s account since a given date.
HTTP Request
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/users/{user_id}/player_day?date={start_date}"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/player_day?date={start_date}",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
GET ~/v3/api/users/{user_id}/player_day?date={start_date}
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/player_day?date={start_date} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
date |
Required | String | UTC Date of the player day start date to access in yyyy-mm-dd format. |
Example of query
?date=2023-01-01
Response:
{
"cash_bet_total_usd": {
"currency": "USD",
"decimal_amount": 123.700000000
},
"deposit_count": 1,
"deposit_total_usd": {
"currency": "USD",
"decimal_amount": 500.0000000000
}
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
cash_bet_total_usd |
Required | DecimalMoney | Total cash bet in USD that the player has done since the provided date. |
deposit_count |
Required | Number | Positive integer. Number of deposits that the player has done since the provided date. |
deposit_total_usd |
Required | DecimalMoney | Total deposit in USD that the player has done since the provided date. |
Change Password
This endpoints is used to change the password for user.
HTTP Request
PUT ~/v3/api/users/{user_id}/password
curl -X PUT -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" -d '{ \
"password": "12345678" \
}' "http://example.com/v3/api/users/{user_id}/password"
var payload = {
"password": "12345678"
};
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/password",
"method": "PUT",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
},
"data": JSON.stringify(payload)
});
PUT ~/v3/api/users/{user_id}/password
HTTP Method | PUT |
Path | ~/v3/api/users/{user_id}/password |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_change_password |
Errors (non exhaustive) | invalid_request , password_reuse_forbidden |
PUT Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
password |
Required | String | New password provided by player and it must be between 8 and 20 characters long. |
Response with
player_credentials
outcome
{
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-02-08T10:18:14Z",
"value": "CfDJ8GDLBmp..."
}
],
"tracking_id": "3f9905b7-9...",
"_links": {
"user": {
"href": "http://example.com/v3/api/users/{user_id}",
"method": "GET"
},
"logout": {
"href": "http://example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US",
"email": "bob@example.com"
}
}
HTTP Response
The returned response returns a password_change_status
property set to Success
.
In case of errors, an error response is returned instead.
Property | Required? | Type | Description |
---|---|---|---|
password_change_status |
Required | String | Success |
auth |
Required* | PlayerTokenResponse | The same object that is returned from the login endpoint. |
Enter SMS Verification Code
This endpoints is used to enter a SMS verification code received by the player on a mobile phone.
HTTP Request
POST ~/v3/api/users/{user_id}/verification
curl -X POST -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" -d '{ \
"mode": "mobile_phone", \
"code": "123456" \
}' "http://example.com/v3/api/users/{user_id}/verification"
var payload = {
"mode": "mobile_phone",
"code": "123456"
};
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/verification",
"method": "POST",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
},
"data": JSON.stringify(payload)
});
POST ~/v3/api/users/{user_id}/verification
HTTP Method | POST |
Path | ~/v3/api/users/{user_id}/verification |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials , player_verification_credentials |
Errors (non exhaustive) | invalid_request , no_pending_verification , invalid_sms_code |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
mode |
Required | String | Must be set to mobile_phone . |
code |
Required | String | The verification code received by SMS. Exactly 6 characters long. |
Response (
player_credentials
request)
{
"mobile_phone": "Verified",
"last_sms_send_date": "2023-05-05T11:18:17Z",
}
Response (
player_verification_credentials
request)
{
"mobile_phone": "Verified",
"last_sms_send_date": "2024-03-06T11:29:32Z",
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-03-07T11:29:50Z",
"value": "CfDJ8Fhe…"
}
],
"tracking_id": "37e22704-39c5-4662-a4a6-48c0f15a3437",
"_links": {
"user": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0.",
"method": "GET"
},
"logout": {
"href": "https://example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US",
"email": "bob@example.com"
}
}
HTTP Response
The returned response is a variant of the VerificationStatus object.
Property | Required? | Type | Description |
---|---|---|---|
mobile_phone |
Required | String | Verified , NotApplicable or InvalidPhone |
last_sms_send_date |
Optional | String | The date the last verification code was sent by SMS. It uses ISO 8601 format yyyy-mm-ddThh:mm:ssZ . |
auth |
Optional† | PlayerTokenResponse | The same object that is returned from the login endpoint. |
Send SMS Verification Code
This endpoint is used to request for an SMS verification code to be sent to the player.
HTTP Request
POST ~/v3/api/users/{user_id}/verification/retry
curl -X POST -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" -d '{ \
"mode": "mobile_phone", \
}' "http://example.com/v3/api/users/{user_id}/verification/retry"
var payload = {
"mode": "mobile_phone",
};
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/verification/retry",
"method": "POST",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
},
"data": JSON.stringify(payload)
});
POST ~/v3/api/users/{user_id}/verification/retry
HTTP Method | POST |
Path | ~/v3/api/users/{user_id}/verification/retry |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials , player_verification_credentials |
Errors (non exhaustive) | invalid_request , too_many_verification_retries |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
mode |
Required | String | Must be set to mobile_phone . |
Response:
{
"mobile_phone": "AwaitingCode",
"last_sms_send_date": "2023-05-05T11:18:17Z",
}
HTTP Response
The returned response is a variant of the VerificationStatus object.
Property | Required? | Type | Description |
---|---|---|---|
mobile_phone |
Required | String | AwaitingCode , NotApplicable or InvalidPhone |
last_sms_send_date |
Optional | String | The date the last verification code was sent by SMS. It uses ISO 8601 format yyyy-mm-ddThh:mm:ssZ . |
Amend User
This endpoint is used to capture the additional player info as an additional endpoint while registration.
HTTP Request
PATCH ~/v3/api/users/{user_id}
curl --request POST 'http://example.com/v3/api/users/{user_id}' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"player_info": {
"address": {
"first_line": "372 River Oak Place",
"second_line": "12 Palm Street",
"city": "Waterloo",
"state_code": "ON",
"zip_code": "N2K 3N8",
"country_code": "CA"
}
}
}'
var payload = {
"player_info": {
"address": {
"first_line": "372 River Oak Place",
"second_line": "12 palm street",
"city": "Waterloo",
"state_code": "ON",
"zip_code": "N2K 3N8",
"country_code": "CA"
}
}
};
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}",
"method": "PATCH",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
},
"data": JSON.stringify(payload)
});
PATCH ~/v3/api/users/{user_id}
HTTP Method | POST |
Path | ~/v3/api/users/{user_id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | extra_player_info |
Errors (non exhaustive) | invalid_request |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Description |
---|---|---|
player_info |
Required | PlayerInfo |
Player Info
Fully populated
player_info
object
{
"address": {
"first_line": "McDuck Castle",
"second_line": "Rannoch Station",
"city": "Highland Perthshire",
"zip_code": "PH17 2QA",
"state_text": "Scotland",
"country_code": "GB"
}
}
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
address |
Optional | Address | N/A | The home address of the player. |
The same Address type is used thant for the User Registration with the same validation policy.
Response (
player_credentials
request)
{
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2024-03-07T11:29:50Z",
"value": "CfDJ8Fhe…"
}
],
"tracking_id": "37e22704-39c5-4662-a4a6-48c0f15a3437",
"_links": {
"user": {
"href": "https://example.com/v3/api/users/ZjJDdW1hTjY4UFRJamw2N1E0YWhEQ1hTMVJCQ0x3PT0.",
"method": "GET"
},
"logout": {
"href": "https://example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US",
"email": "bob@example.com"
}
}
HTTP Response
Example of Success response
{
"registration_status": "Success",
"auth": {
"grant_type": "player_credentials",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-11-19T18:00:12Z",
"value": "CfDJ8A9gjaMNK1FDsBTJEa5WnXS/pAcE48Sr+UhE3wqGnL7o7LJdsU0LoPqzXBy1ayYB5SHpV5sHWMsdSr/4NlrnQS9MzEgP9T4abgSeJ6NV55Ux8pFY09GADdobZjJW1CcmzetKt9gREMJVjunXrLJ6eALyfO/W16ur27v59Eb7e2Wu3BajGWDmrhilZltx3jFnipoWp0oP1jlskm4aniZnP6azK+uvUbUReZiEyzS7tElMycB9u0qLVN0TYPb3f8vwX2NYGYTuC2fj/JgiufBmzQyvMzuhPgWi9i6DHGtNgFREo2yS/jn3nwYnF+A0lTpnaSsxMHv1KVfEV8KN47NlHh0t2y7q1gjIvRv6lXRmZ3rXHrTiH51sMLSVNmbSqZsj/ktApHVKlstyCMV4WiMVUsLcbTDXQeNy89En99gJNmMY7ut5D8M/1iTJ7M2E0Pi16TypeI+NTQjvhg//kS4I4PneumKHUFhZzbO7XETi0u5oRap4sgJ+YBEjPYsUq7AEONct3Bai4SQMwkZvj9CpkXVyCyppix4BSiKlTX6vKlZl+jiYyykCXQKvHyD5KNC36Q=="
}
],
"_links": {
"user": {
"href": "https://example.com/v3/api/users/MzU3aXZQakV5Z2Q3WnRIZ285dW9hOWRrbG4vbk5RPT0.",
"method": "GET"
},
"logout": {
"href": "https://example.com/v3/api/auth/player_credentials",
"method": "DELETE"
}
},
"locale": "en-US"
}
}
Property | Required? | Type | Description |
---|---|---|---|
auth |
Optional† | PlayerTokenResponse | The same object that is returned from the login endpoint. |
Create Password Reset
This endpoint is used at the begining of reset password journey by using either email or mobile phone with Date Of Birth combination.
HTTP Request
POST ~/v3/api/users/password_resets
curl --request POST 'http://example.com/v3/api/users/password_resets' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"captcha": {
"type": "turnstile",
"token": "0.spOowAu0RfY4dii..."
},
"email": "email@gmail.com",
"birth_date": "1989-05-21"
}'
var payload = {
"captcha": {
"type": "turnstile",
"token": "0.spOowAu0RfY4dii..."
},
"email": "email@gmail.com",
"birth_date": "1989-05-21"
};
$.ajax({
"url": "http://example.com/v3/api/users/password_resets",
"method": "POST",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {brand_public_credentials_token}"
},
"data": JSON.stringify(payload)
});
PATCH ~/v3/api/users/password_resets
HTTP Method | POST |
Path | ~/v3/api/users/password_resets |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Errors (non exhaustive) | invalid_request , captcha_invalid , recovery_contact_support , rate_limit_exceeded , recovery_email_exhausted , recovery_sms_exhausted |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type Description |
---|---|---|
captcha |
Mandatory | CAPTCHA Token |
email |
Optional | String |
mobile_phone |
Optional | String |
birth_date |
Mandatory | String |
HTTP Response
Example of Success response
{
"status": "Pending",
"expiration": "2024-08-28T23:06:46",
"remaining_resend_count": 3,
"remaining_attempt_count": 3,
"_links": {
"enter_password_reset_code": {
"href": "http://example.com/v3/api/users/password_resets/7BsPqMj5BlyUrtD2",
"method": "PATCH"
},
"resend_password_reset_code": {
"href": "http://example.com/v3/api/users/password_resets/7BsPqMj5BlyUrtD2/resend",
"method": "POST"
}
}
}
Property | Required? | Type | Description |
---|---|---|---|
status |
Mandatory | String | Pending |
expiration |
Mandatory | string | ISO 8601 UTC timestamp in format yyyy-mm-ddThh:mm:ssZ . |
remaining_resend_count |
Mandatory | Integer | Minimum value is 0 . It would start at a value like 3 . |
remaining_attempt_count |
Mandatory | Integer | When it decrease to 0 , the status should change to Expired . |
enter_password_reset_code |
Mandatory | string | It is a link that point to the endpoint to enter the password reset verification code. |
resend_password_reset_code |
Mandatory | string | It is a link that point to the endpoint to retry sending the SMS/password verification code. |
Enter Password Reset Code
This endpoint is used to send the recovery code received by SMS or email to the Kore API. The result should give a token suitable for password reset access. The link should be retrieved via the enter_password_reset_code
link from previous endpoint. It’s only valid if expiration is in the future.
HTTP Request
PATCH ~/v3/api/users/password_resets/{id}
curl --request PATCH 'http://example.com/v3/api/users/password_resets/{id}' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer {brand_public_credentials_token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"code": "465465",
"play_mode": "Real"
}'
var payload = {
"code": "465465",
"play_mode": "Real"
};
$.ajax({
"url": "http://example.com/v3/api/users/password_resets/{id}",
"method": "PATCH",
"headers": {
"content-type": "application/json",
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {brand_public_credentials_token}"
},
"data": JSON.stringify(payload)
});
PATCH ~/v3/api/users/password_resets/{id}
HTTP Method | POST |
Path | ~/v3/api/users/password_resets/{id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Errors (non exhaustive) | invalid_request , rate_limit_exceeded , recovery_code_exhausted , recovery_code_invalid , recovery_not_found |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type Description |
---|---|---|
code |
Mandatory | String |
play_mode |
Mandatory | String |
HTTP Response
Example of Success response
{
"status": "Recovered",
"expiration": "2020-07-12T08:08:41Z",
"remaining_resend_count": 3,
"remaining_attempt_count": 3,
"_links": {
"enter_password_reset_code": {
"href": "https://example.com/v3/users/password_resets/yEf1Qb",
"method": "PATCH"
},
"resend_password_reset_code": {
"href": "https://example.com/v3/users/password_resets/yEf1Qb/resend",
"method": "POST"
}
},
"auth": {
"grant_type": "player_change_password",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
],
"_links": {
"change_password": {
"href": "http://www.example.com/v3/api/users/{userid}/password",
"method": "PATCH"
}
}
}
}
Property | Required? | Type | Description |
---|---|---|---|
status |
Mandatory | String | Recovered |
expiration |
Mandatory | string | ISO 8601 UTC timestamp in format yyyy-mm-ddThh:mm:ssZ . It would be in the past (it’s expired). |
remaining_resend_count |
Mandatory | Integer | It would be set to 0 . |
remaining_attempt_count |
Mandatory | Integer | It would be set to 0 . |
enter_password_reset_code |
Mandatory | string | It is a link that point to the endpoint to enter the password reset verification code. |
resend_password_reset_code |
Mandatory | string | It is a link that point to the endpoint to retry sending the SMS/password verification code. |
auth |
Required* | PlayerTokenResponse | The same object that is returned from the login endpoint. |
Loyalty
Example of Loyalty Object
"loyalty": {
"tier": "FunkyFortunesTopaz",
"balance": 0,
"tier_name": "Topaz"
}
The Loyalty
type is used to represent the loyalty state of a player.
Property | Required? | Type | Description |
---|---|---|---|
tier |
Required | String | Internal name of the loyalty tier. |
balance |
Required | Number | A positive integer that represents the current loyalty balance of the player. |
tier_name |
Required | String | A localized display name for the tier . |
Example of extended Loyalty Object (offline_signon)
"loyalty": {
"next_tier": "GenesysNewbie",
"next_tier_points": 100,
"next_tier_name": "Newbie",
"tier_level": 1,
"next_tier_level": 2,
"tier_points": 0,
"tier": "GenesysNewbie",
"balance": 0,
"tier_name": "Newbie"
}
The additional properties are also present when the grant type is set to offline_signon
Property | Required? | Type | Description |
---|---|---|---|
tier_level |
Required | Number | Positive integer which describe the loyalty level. |
tier_points |
Required | Number | Positive integer which describe the number of points required to reach the current tier. |
next_tier |
Optional* | String | Internal name of the next loyalty tier, if any. |
next_tier_name |
Optional* | String | A localized display name for the next_tier , if any. |
next_tier_level |
Optional* | Number | Positive integer which describe the loyalty level for the next tier. |
next_tier_points |
Optional* | Number | Positive integer which describe the number of points required to reach the next tier. |
The next_*
properties are absent if the player has reached the maximum tier.
Verification Status
Example of Verification Status Object
"verification_status": {
"email": "Unverified",
"mobile_phone": "NotApplicable"
}
The VerificationStatus
object provides information about whether the mobile phone and the email address of the player have been verified.
Property | Required? | Type | Description |
---|---|---|---|
email |
Required | String | Unverified or Verified |
mobile_phone |
Required | String | Unverified , Verified , NotApplicable , InvalidPhone , or AwaitingCode |
Status | Description |
---|---|
Unverified |
The player has not verified this means of contact. In the case of mobile_phone `, it implies no verification is in progress. |
Verified |
The player has successfully verified their means of contact. |
NotApplicable |
mobile_phone only. The phone verification is disabled for this brand and/or the player’s country. |
AwaitingCode |
mobile_phone only. An SMS verification code has been sent, but the player has not provided us with the code yet. |
InvalidPhone |
mobile_phone only. No verification SMS sent because the provided phone number is invalid. |
Highest Win
Property | Required? | Type | Description |
---|---|---|---|
payout |
Required | MoneyType | Payout of the highest win. |
game |
Required | Game | The game where the payout was achieved. The _actions and _links properties are omitted for disabled games (see warning below). |
Tournament Stats
Example of TournamentStats object
{
"win_amount": {
"currency": "USD",
"amount": 15000,
"exponent": 2
},
"name": "Fun Tournament 2",
"rank": 1,
"end_date": "2019-03-26T15:54:04Z",
"start_date": "2019-03-26T15:48:55Z"
}
Property | Required? | Type | Description |
---|---|---|---|
name |
Required | string | Name of the tournament. Not localized. |
end_date |
Required | string | Date and time when the tournament was finished in ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). |
start_date |
Required | string | Date and time when the tournament was started in ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). |
rank |
Required | number | Final rank of the player in the tournament. The highest rank is 1 . |
win_amount |
Optional | MoneyType | Only present if the player finished the tournament with a winning rank. |
Competition Stats
Example of CompetitionStats object
{
"name": "Fun Competition",
"rank": 1,
"end_date": "2019-03-26T15:54:04Z",
"start_date": "2019-03-26T15:48:55Z"
}
Property | Required? | Type | Description |
---|---|---|---|
name |
Required | string | Name of the competition. Not localized. |
end_date |
Required | string | Date and time when the competition was finished in ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). |
start_date |
Required | string | Date and time when the competition was started in ISO 8601 format (yyyy-mm-ddThh:mm:ssZ ). |
rank |
Required | number | Final rank of the player in the competition. The highest rank is 1 . |
Welcome
Example of Welcome object
"welcome": {
"page_id" : 1,
"bonus_codes":["WELCOME", "BONUS"]
}
The welcome object is passed when creating new user accounts directly or indirectly via the user activation endpoint.
It is used to record additional information in the database that link new player registrations to welcome page campaigns.
Property | Required? | Type | Max Size | Description |
---|---|---|---|---|
page_id |
Mandatory | Integer | N/A | Landing page Id. The page_id must be strictly positive. |
bonus_codes |
Mandatory | Array of String |
2 | Array of max 2, min 1 bonus code present on landing page. |
Games
Get List of Games
GET ~/v3/api/games
curl -X GET -H "Content-Type: application/json" \
-H "authorization: bearer {user-token}" \
"http://example.com/v3/api/games"
$.ajax({
"url": "http://example.com/v3/api/games",
"method": "GET",
"headers": {
"authorization" : "bearer {user-token}"
}
});
Response:
{
"games": [
{
"provider": "saucify",
"slug": "midnight-racer-video-slot",
"name": "Midnight Racer",
"category": "videoslot",
"platform": "html",
"locale": "en-US",
"attributes": {
"lines": "30",
"free_spins": "true"
},
"_actions": {
"play": {
"href": "http://example.com/play/html/MidnightRacerVideoSlot?ReturnUrl=http%3A%2F%2Fwww.example.com"
}
},
"_links": {
"_self": {
"href": "http://example.com/v3/api/games/Html/MidnightRaceVideoSlot"
}
}
},
{
"provider": "saucify",
"slug": "zodiac-video-slot",
"name": "Zodiac",
"category": "videoslot",
"platform": "html",
"locale": "en-US",
"attributes": {
"lines": "12",
"free_spins": "true"
},
"_actions": {
"play": {
"href": "http://example.com/play/html/ZodiacVideoSlot?ReturnUrl=http%3A%2F%2Fwww.example.com"
}
},
"_links": {
"_self": {
"href": "http://example.com/v3/api/games/Html/ZodiacVideoSlot"
}
}
}
]
}
Return the list of available games.
A play
action link is provided when the endpoint is used with a player_credentials
authorization. These links makes it possible launch to games.
HTTP Request
GET ~/v3/api/games
HTTP Method | GET |
Path | ~/v3/api/games |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
games |
Required | Array | Array of Game elements. |
Get Game Info
GET ~/v3/api/games/{game_id}
curl -X GET -H "Content-Type: application/json" \
-H "authorization: bearer {user-token}" \
"http://example.com/v3/api/games/{game_id}"
$.ajax({
"url": "http://example.com/v3/api/games/{game_id}",
"method": "GET",
"headers": {
"authorization" : "bearer {user-token}"
}
});
Response:
{
"provider": "saucify",
"slug": "midnight-racer-video-slot",
"name": "Midnight Racer",
"category": "videoslot",
"platform": "html",
"locale": "en-US",
"attributes": {
"lines": "30",
"free_spins": "true"
},
"_actions": {
"play": {
"href": "http://example.com/play/html/MidnightRacerVideoSlot?ReturnUrl=http%3A%2F%2Fwww.example.com"
},
"_links": {
"_self": {
"href": "http://example.com/v3/api/games/Html/MidnightRaceVideoSlot"
}
}
}
Get information about a specific game.
HTTP Request
GET ~/v3/api/games/{game_id} |
|
---|---|
HTTP Method | GET |
Path | ~/v3/api/games/{game_id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
HTTP Response
Return the Game
object.
Example of
Game
{
"attributes": {
"lines": "40",
"free_spins": "true"
},
"provider": "saucify",
"slug": "mrs-greens-plant-emporium-video-slot",
"name": "Mrs Greens Plant Emporium",
"locale": "en-US",
"category": "videoslots",
"platform": "html",
"medal": {
"level": 3,
"name": "Gold",
"awarded_date": "2019-03-06T12:16:17Z"
},
"_actions": {
"play": {
"href": "https://MandarinPalace-webclient-saucify13.aristx.net/en-US/play/Html/MrsGreensPlantEmporiumVideoSlot?sessionid=L7vcH4hDE7jqxmXBMpBkov4lOYF7Gq65RaDYtzjxkPQ%3D&usertoken=cUrZ7y94jP78S1RR9CeFNgp9zAce5A%3D%3D&playmode=Real&email=bob@example.com&returnurl=http%3A%2F%2Fwww.google.com",
"method": "GET"
}
},
"_links": {
"_self": {
"href": "https://kore13.aristx.net/v3/api/games/Html/MrsGreensPlantEmporiumVideoSlot",
"method": "GET"
}
},
"device_category": "mobile"
}
The Game
type is shared by several endpoints: ~/v3/api/games
, ~/v3/api/games/{gameid}
and ~/v3/api/tournaments/{tournament-id}
.
Obtain Launch Token
This endpoint is used to retrieve a launch token which can be used to sign in a player on a game which was launched in unauthenticated mode.
Unauthenticated mode refers to a game which was launched from a play
action link retrieved with a brand_public_credentials
credentials, i.e. before the player was able to sign in and obtain player_credentials
credentials.
This endpoint can only be used after the player has logged in. The retrieved launch token would be passed to the IFrame hosting the game using window.postMessage()
. The exact details are provider specific and outside the scope of this documentation.
HTTP Request
POST ~/v3/api/games/{game_id}/tokens |
|
---|---|
HTTP Method | POST |
Path | ~/v3/api/games/{game_id}/tokens |
Query Parameters | ?deviceCategory={mobile|desktop} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials in Real play_mode |
POST ~/v3/api/games/{game_id}/tokens
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: bearer {user-token}" \
-H "Content-Type: application/json" \
"http://example.com/v3/api/games/{game_id}/tokens" \
-d '{ \
"grand_type": "launch_game"
}'
var payload = {
"grant_type": "launch_game"
}
$.ajax({
"url": "http://example.com/v3/api/games/{game_id}/tokens",
"method": "POST",
"headers": {
"Authorization" : "bearer {user-token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
deviceCategory |
*Optional | Enum String | Either mobile or desktop |
POST Parameters
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Mandatory | String | Set to launch_game |
HTTP Response
Response:
{
"grant_type": "launch_game",
"tokens": [
{
"type": "Launch",
"expiration": "2024-03-21T15:03:47Z",
"value": "Lm30IB6ncC7uTFm3Xw2xXPyqEl4tISOWuQ3rAdrzW0oOlp48pIHsEdoK51pF8vRq_Cte5DPavsEIi7Cj6TeowjGVk0_h3Dg.."
}
],
"locale": "en-US"
}
The response is in a format that is similar to PlayerTokenResponse but only a single outcome is possible.
Property | Required? | Type | Description |
---|---|---|---|
grant_type |
Required | String | Set to launch_game |
locale |
Required | String | One of the IETF Language tags. See locales. |
tokens |
Required | Array of Tokens | Must contain one token with type set to Launch |
Custom Game Launch
This endpoint is used to retrieve a custom play
action link which can be used to to launch a game with custom launch parameters.
This endpoint allows customization of the launch sequence, extending beyond the default behavior of the _actions.play
action links provided in the Game object.
HTTP Request
POST ~/v3/api/games/{game_id}/launch |
|
---|---|
HTTP Method | POST |
Path | ~/v3/api/games/{game_id}/launch |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials . |
POST Parameters
POST ~/v3/api/games/{game_id}/launch
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: bearer {user-token}" \
-H "Content-Type: application/json" \
"http://example.com/v3/api/games/{game_id}/launch" \
-d '{ \
"betconstruct": { \
"path_suffix": "CounterStrike/Europe/18280635/esl-challenger/24288131/parivision-dmax", \
"section": "live" \
} \
}'
var payload = {
"betconstruct": {
"path_suffix": "CounterStrike/Europe/18280635/esl-challenger/24288131/parivision-dmax",
"section": "live"
}
}
$.ajax({
"url": "http://example.com/v3/api/games/{game_id}/launch",
"method": "POST",
"headers": {
"Authorization" : "bearer {user-token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
betconstruct |
Required | BetConstructLaunch |
Specific to BetConstruct custom launch sequence. |
The BetConstructLaunch
has two parameters.
Property | Required? | Type | Description |
---|---|---|---|
section |
Required | String | live or prematch . |
path_suffix |
Optional | String | A path suffix appended after /event-view in the BetConstruct URL.Must not start nor end with a slash character / and must not contain a query string ? character.Max 128 ASCII characters. Must match the ^[^/?]+(?:[-._~A-Za-z0-9/] |
Response:
{
"mobile_phone": "AwaitingCode",
"last_sms_send_date": "2023-05-05T11:18:17Z",
}
HTTP Response
Response:
{
"_actions": {
"play": {
"href": "http://example.com/v3/play/unauthenticated/betconstruct?token=eyJCcmFuZCI...",
"method": "GET"
}
}
}
The response contains a mandatory action play link.
Property | Required? | Type | Description |
---|---|---|---|
_actions |
Required | LinkCollection | Action for the game. |
The link collection contains the following link.
Action | Required? | Description |
---|---|---|
play |
Required | Provide a link to play the game. |
Game
Example of
Game
{
"attributes": {
"lines": "40",
"free_spins": "true"
},
"provider": "saucify",
"slug": "mrs-greens-plant-emporium-video-slot",
"name": "Mrs Greens Plant Emporium",
"locale": "en-US",
"category": "videoslots",
"platform": "html",
"medal": {
"level": 3,
"name": "Gold",
"awarded_date": "2019-03-06T12:16:17Z"
},
"_actions": {
"play": {
"href": "https://MandarinPalace-webclient-saucify13.aristx.net/en-US/play/Html/MrsGreensPlantEmporiumVideoSlot?sessionid=L7vcH4hDE7jqxmXBMpBkov4lOYF7Gq65RaDYtzjxkPQ%3D&usertoken=cUrZ7y94jP78S1RR9CeFNgp9zAce5A%3D%3D&playmode=Real&email=bob@example.com&returnurl=http%3A%2F%2Fwww.google.com",
"method": "GET"
}
},
"_links": {
"_self": {
"href": "https://kore13.aristx.net/v3/api/games/Html/MrsGreensPlantEmporiumVideoSlot",
"method": "GET"
}
},
"device_category": "mobile"
}
The Game
type is shared by several endpoints: ~/v3/api/games
, ~/v3/api/games/{gameid}
and ~/v3/api/tournaments/{tournament-id}
.
Game Properties
Property | Required? | Type | Description |
---|---|---|---|
provider |
Required | GameProvider | Name of the game provider. This is a enum string value. |
slug |
Required | String | Game name in lowercase kebab style. Games that support multiple platform s feature multiple entries with the same slug . |
category |
Required | String | Can be one of classicslots , videoslots , videopokers , tablegames , sportsbook , crashgames or other . |
platform |
Required | String | Can be one of html or auto . |
name |
Required | String | Display name of the game. Please note game names are not localized. |
locale |
Required | String | Locale of the game. |
attributes |
saucify , genii , go or crucible |
Game Attribute Collection | Array of game attributes. Present only for saucify , genii , go or crucible games. |
medal |
Optional | Medal | Highest medal awarded to the player for the game. The property is only present if the player was awarded a medal. The property is always omitted for a grant type of brand_public_credentials . |
free_games_set |
Optional* | Array of Free Game Sets | Array of free game sets. The array may be empty. The propery is only provided for saucify , genii , go or crucible games. |
_actions |
Optional | LinkCollection | Actions for the game. See below for details. |
_links |
Required | LinkCollection | Links for the game. See below for details. |
device_category |
Optional | Enum String | Can be one of mobile , desktop , auto or responsive . If the property is absent the game is assumed to be responsive which means the game adapts to either mobile or desktop based on the viewport size. The auto category means that Kore is choosing to to launch either the mobile or desktop version of the game based on the user agent. |
Property is only present if the game is designed for a particular device.
Game Actions
These are the actions available for each Game
.
Action | Required? | Description |
---|---|---|
play |
Optional | Provide a link to play the game. This action is usually provided for player_credentials access tokens only (except betconstruct games). It may be omitted when play_mode is set to Practice or for some currencies. |
play_tournament |
Optional* | Provide a link to play the game in tournament mode, for a specific tournament. It is the responsibility of the consumer of the API to ensure the link is still valid when called. |
Game Links
These are the resource links available for each for each Game
.
Action | Required? | Description |
---|---|---|
_self |
Required | Link to ~/v3/api/games/{gameid} endpoint to obtain detailed information about a given game. |
launch |
Optional* | Link to ~/v3/api/games/{gameid}/launch endpoint to perform custom game launches.*Only implemented and always required for betconstruct games. |
launch_token |
Optional* | Link to ~/v3/api/games/{gameid}/tokens endpoint to obtain player tokens for games launch in unauthenticated mode.*Only implemented and always required for betconstruct games. |
Game Provider
export enum GameProvider {
Rival = "rival",
Saucify = "saucify",
Go = "go",
Apollo = "apollo",
Genii = "genii",
LionGames = "liongames",
BetSoft = "betsoft",
Nucleus = "nucleus",
BetConstruct = "betconstruct",
Crucible = "crucible",
EBet = "ebet",
OriginalSpirit = "originalspirit",
FreshDeck = "freshdeck",
ArrowsEdge = "arrowsedge",
Evolution = "evolution",
PragmaticPlay = "pragmaticplay",
Ezugi = "ezugi",
BitVille = "bitville",
PariPlay = "pariplay"
}
The game provider is a string enum / discriminated union of strings. The following values are supported:
Value | Thirdparty? |
---|---|
saucify |
No |
genii |
No |
go |
No |
apollo |
No |
rival |
Yes |
betsoft |
Yes |
nucleus |
Yes |
ezugi |
Yes |
crucible |
Mixed |
ebet |
Yes |
arrowsedge |
Yes |
originalspirit |
Yes |
freshdeck |
Yes |
evolution |
Yes |
pragmaticplay |
Yes |
betconstruct |
Yes |
bitville |
Yes |
pariplay |
Yes |
Attributes
Each property in the collection is an attribute. Property name is the attribute name. Property value is the attribute value (always a string). The properties are only provided for genii
, saucify
or go
providers.
Name | Game Category | Description |
---|---|---|
lines |
videoslots ,classicslots |
Number of lines. |
feature_game |
videoslots ,classicslots |
Feature game. A value of “true” indicates that the game has feature game. No property indicates no feature game. |
free_spins |
videoslots |
Free spins. A value of “true” indicates that the game has free spins. No property indicates no free spins. |
gamble_game |
videoslots |
Gamble game. A value of “true” indicates that the game has a gamble game. No property indicates no gamble game. |
max_ways |
videoslots |
Max ways. A value of “true” indicates that the game has free spins. No property indicates no free spins. |
progressive |
videoslots ,classicslots |
Progressive. A value of “true” indicates that the game progressive. No property indicates that it is not. |
bonus_bucks |
classicslots |
Bonus bucks. |
decks |
tablegames |
Number of decks in a Blackjack. |
surrender |
tablegames |
“true” indicates that the Blackjack game has surrender option. No property indicates that it does not. |
insurance |
tablegames |
“true” indicates that the Blackjack game has insurance. No property indicates that it does not. |
single_zero |
tablegames |
“true” indicates that the Roulette game has a single zero. |
double_zero |
tablegames |
“true” indicates that the Roulette game has a double zero. |
elite |
tablegames |
“true” indicates that the tables game is an Elite version. |
card_deck |
videopokers |
Number of card decks in the video poker game. |
deuces_wild |
videopokers |
“true” indicates that deuces are wild for the Video Poker game. |
jokers_wild |
videopokers |
“true” indicates that jokers are wild for the Video Poker game. |
progressive |
videopokers |
“true” the the Video Poker game is progressive. |
play1 |
videopokers |
“true” indicates that the Video Poker game can play only one hand at a time. |
play10 |
videopokers |
“true” indicates that the Video Poker game can play 10 hands at a time. |
play50 |
videopokers |
“true” indicates that the Video Poker game can play 50 hands at a time. |
picks |
other |
Number of picks in Keno game. |
multiplier |
other |
Multiplier of Keno game. |
Medal
Example of
Medal
"medal": {
"level": 3,
"name": "Gold",
"awarded_date": "2019-03-06T12:16:17Z"
}
Property | Required? | Type | Description |
---|---|---|---|
name |
Required | string | Non localized name of the medal. |
level |
Required | number | A positive integer starting at 0 which represents the rank of the medal (the higher the better). |
awarded_date |
Required | string | The date the medal was awarded to the playing using ISO 8601 UTC format (yyyy-mm-ddThh:mm:ssZ ). |
Currently only the following medals exist in the system:
Level | Name |
---|---|
0 | Blue |
1 | Bronze |
2 | Silver |
3 | Gold |
4 | Diamond |
Free Games Set
Example pending
FreeGameSet
{
"free_games_set": [
{
"available_rounds": 10,
"status": "pending",
"created_date": "2016-11-29T15:15:26Z",
"updated_date": "2016-11-29T15:15:26Z"
}
]
}
Example of active
FreeGameSet
{
"free_games_set": [
{
"available_rounds": 9,
"status": "active",
"created_date": "2016-11-29T15:15:26Z",
"updated_date": "2022-11-23T08:49:15Z"
}
]
}
Property | Required? | Type | Description |
---|---|---|---|
available_rounds |
Required | number | Strictly positive integer explaining how many free games round are left in the set. |
status |
Required | string | Either pending or active . Pending games are games that the player never opened. |
created_date |
Required | string | Timestamp indicating when the free games set was awarded to the player. ISO 8601 UTC format (yyyy-mm-ddThh:mm:ssZ ). |
updated_date |
Required | string | Timestamp indicating the last time available_rounds was updated, in other words the last time the player used a free game round. ISO 8601 UTC format (yyyy-mm-ddThh:mm:ssZ ). |
Tournaments
Get Tournament News
This endpoint can be used to retrieve a set of tournament news items.
GET ~/v3/api/tournaments/news
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {{access_token}" \
"http://example.com/v3/api/tournaments/news"
$.ajax({
"url": "http://example.com/v3/api/tournaments/news",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {{access_token}}"
}
});
Response:
{
"news": [
{ "text": "Example Player has won 100.00 credits (1st place) in Example Tournament!" },
{ "text": "Sign up for Example Tournament" }
],
"_links": {
"latest": {
"href": "http://example.com/v3/api/tournaments/news?min_id=3"
}
}
}
HTTP Request
GET ~/v3/api/tournaments/news
HTTP Method | GET |
Path | ~/v3/api/tournaments/news |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials with Real as play_mode |
HTTP Response
This endpoint returns news
and latest
properties.
Property | Required? | Type | Description |
---|---|---|---|
news |
Required | Array | Array of News items in descending chronological order. |
_links |
Required | LinkCollection | Links related to news. |
News
Property | Required? | Type | Description |
---|---|---|---|
text |
Required | String | Localized and unstyled news item. |
Links
Link | Required? | Description |
---|---|---|
latest |
Required | Link to retrieve the latest tournament news items, which occurred since the response was sent. |
How to use the API to poll for tournament news (pseudo-code)
let latest_news = "~/v3/api/tournaments/news";
setInterval(() => poll(), 1000)
function poll()
{
fetch(latest_news).then(response => {
var json = response.json();
// ... show additional news to user
latest_news = json._links.latest.href;
});
}
Get List of Tournaments
This endpoint can be used to retrieve the list of active tournaments.
GET ~/v3/api/tournaments
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {{access_token}" \
"http://example.com/v3/api/tournaments"
$.ajax({
"url": "http://example.com/v3/api/tournaments",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {{access_token}}"
}
});
Response (with one tournament only)
{
"tournaments": [
{
"name": "Test Tournament",
"game_category": "tablegames",
"type": "SitAndGo",
"registration": {
"status": "None"
},
"registration_options": [
{
"type": "Cash",
"fee": {
"currency": "USD",
"amount": 10000,
"exponent": 2
},
"buyin": {
"currency": "USD",
"amount": 10000,
"exponent": 2
}
},
{
"type": "Bonus"
}
],
"player_counts": {
"registered": 1,
"minimum": 2,
"maximum": 2
},
"status": "Finished",
"status_change_date": "2013-05-03T12:36:25Z",
"prize_pool": {
"type": "TotalPrizePool",
"minimum": {
"currency": "USD",
"amount": 2000000,
"exponent": 2
},
"current": {
"currency": "USD",
"amount": 2000000,
"exponent": 2
}
},
"rebuys": {
"is_allowed": false,
"use_count": 0,
"max_use_count": 5,
"purchase_options": [ {
"type": "Cash",
"cost": {"currency": "USD", "amount": 5000, "exponent": 2}
}]
},
"_links": {
"_self": {
"href": "https://api.example.com/v3/api/tournaments/567",
"method": "GET"
},
"register": {
"href": "https://api.example.com/v3/api/tournaments/567/registration",
"method": "POST"
},
"unregister": {
"href": "https://api.example.com/v3/api/tournaments/567/registration",
"method": "DELETE"
},
"rebuy": {
"href": "https://api.example.com/v3/api/tournaments/567/rebuys",
"method": "POST"
}
}
}
]
}
HTTP Request
GET ~/v3/api/tournaments
HTTP Method | GET |
Path | ~/v3/api/tournaments |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials with Real as play_mode |
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
tournaments |
Required | Array | Array of partial Tournament items. |
Get Tournament Details
This endpoint is used to retrieve the details about a single tournament.
GET ~/v3/api/tournaments/{tournament-id}
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {{access_token}" \
"http://example.com/v3/api/tournaments/{tournament-id}"
$.ajax({
"url": "http://example.com/v3/api/tournaments/{tournament-id}",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {{access_token}}"
}
});
HTTP Request
GET ~/v3/api/tournaments/{tournament-id}
HTTP Method | GET |
Path | ~/v3/api/tournaments/{tournament-id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials with Real as play_mode |
HTTP Response
This endpoint returns the full representation of a Tournament
object.
Register for Tournament
This endpoint is retrieved from the register
Link
in the Tournament object. It is used to join the tournament.
POST ~/v3/api/tournaments/{tournament-id}/registration
curl -X POST \
http://example.com/v3/api/tournaments/{tournament_id}/registration \
-H "Authorization: Bearer {{access_token}" \
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-d '{ \
"type": "Cash" \
}'
var payload = {
"type" : "Cash"
}
$.ajax({
"url": "http://example.com/v3/api/tournaments/{tournament_id}/registration",
"method": "POST",
"headers": {
"x-kore-returnurl": "http://www.example.com/",
"authorization" : "bearer {{access_token}}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
Response (successful registration)
{"status": "Registered"}
HTTP Request
POST ~/v3/api/tournaments/{tournament-id}/registration
HTTP Method | POST |
Path | ~/v3/api/tournaments/{tournament-id}/registration |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials with Real as play_mode |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | String | Can be one of: Cash , Loyalty or Bonus . |
bonus_code |
Optional | String | Required if the type is set to Bonus . |
HTTP Response
Upon successful registration the API returns a Registration object with an HTTP 200 status code.
If there is a problem the API will return an Error
.
Unregister from Tournament
This endpoint is retrieved from the unregister
Link
in the Tournament object. It is used to leave a tournament which was previously joined.
DELETE ~/v3/api/tournaments/{tournament-id}/unregister
curl -X DELETE \
http://example.com/v3/api/tournaments/{tournament_id}/registration \
-H "Authorization: Bearer {{access_token}" \
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
$.ajax({
"url": "http://example.com/v3/api/tournaments/{tournament_id}/registration",
"method": "DELETE",
"headers": {
"x-kore-returnurl": "http://www.example.com/",
"authorization" : "bearer {{access_token}}"
}
});
HTTP Request
DELETE ~/v3/api/tournaments/{tournament-id}/registration
HTTP Method | DELETE |
Path | ~/v3/api/tournaments/{tournament-id}/registration |
Required Headers | X-Kore-ReturnUrl , Authorization |
Grant Type | player_credentials with Real as play_mode |
HTTP Response
Upon successful registration the API returns an empty response with an HTTP 200 status code.
If there is a problem the API returns an Error
instead.
Purchase Rebuy
This endpoint is retrieved from the rebuy
Link
in the Tournament object. It is used to purchase a tournament rebuy, which resets the tournament balance to its starting point.
POST ~/v3/api/tournaments/{tournament-id}/rebuys
curl -X POST \
http://example.com/v3/api/tournaments/{tournament_id}/rebuys \
-H "Authorization: Bearer {{access_token}" \
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-d '{ \
"type": "Cash" \
}'
var payload = {
"type" : "Cash"
}
$.ajax({
"url": "http://example.com/v3/api/tournaments/{tournament_id}/rebuys",
"method": "POST",
"headers": {
"x-kore-returnurl": "http://www.example.com/",
"authorization" : "bearer {{access_token}}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
Response (successful rebuy)
{
"is_allowed": true,
"use_count": 2,
"max_use_count": 5,
"purchase_options": [ {
"type": "Cash",
"cost": {"currency": "USD", "amount": 5000, "exponent": 2}
}]
}
HTTP Request
POST ~/v3/api/tournaments/{tournament-id}/rebuys
HTTP Method | POST |
Path | ~/v3/api/tournaments/{tournament-id}/rebuys |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials with Real as play_mode |
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | String | Set to Cash |
HTTP Response
If the rebuy purchase is successful the the API returns an updated Rebuys Status object.
If there is a problem the API returns an Error
instead.
Tournament
Example of Tournament Object
{
"name": "Test Tournament",
"game_category": "tablegames",
"type": "SitAndGo",
"registration": {
"status": "None"
},
"registration_options": [
{
"type": "Cash",
"fee": {
"currency": "USD",
"amount": 10000,
"exponent": 2
},
"buyin": {
"currency": "USD",
"amount": 10000,
"exponent": 2
}
},
{
"type": "Bonus"
}
],
"player_counts": {
"registered": 1,
"minimum": 2,
"maximum": 2
},
"status": "Finished",
"status_change_date": "2013-05-03T12:36:25Z",
"prize_pool": {
"type": "TotalPrizePool",
"minimum": {
"currency": "USD",
"amount": 2000000,
"exponent": 2
},
"current": {
"currency": "USD",
"amount": 2000000,
"exponent": 2
}
},
"rebuys": {
"is_allowed": false,
"use_count": 0,
"max_use_count": 5,
"purchase_options": [ {
"type": "Cash",
"cost": {"currency": "USD", "amount": 5000, "exponent": 2}
}]
},
"_links": {
"_self": {
"href": "https://api.example.com/v3/api/tournaments/567",
"method": "GET"
},
"register": {
"href": "https://api.example.com/v3/api/tournaments/567/registration",
"method": "POST"
},
"unregister": {
"href": "https://api.example.com/v3/api/tournaments/567/registration",
"method": "DELETE"
},
"rebuy": {
"href": "https://api.example.com/v3/api/tournaments/567/rebuys",
"method": "POST"
}
},
"description": "Decription of a Test Tournament",
"credits": {
"currency": "XTC",
"amount": 10000,
"exponent": 2
},
"games": [
{
"attributes": {
"picks": "10",
"multiplier": "9"
},
"provider": "saucify",
"slug": "test-game",
"name": "Test Game",
"locale": "en-US",
"category": "other",
"platform": "html",
"_actions": {
"play_tournament": {
"href": "https://www.example.com/en-US/play/tournamentHtml/TestGame"
"method": "GET"
}
},
"_links": {
"_self": {
"href": "http://wwww.example.com/v3/api/games/Html/TestGame",
"method": "GET"
}
}
}
],
"prizes": [
{
"rank": 1,
"minimum": {
"currency": "USD",
"amount": 1000000,
"exponent": 2
},
"current": {
"currency": "USD",
"amount": 1000000,
"exponent": 2
}
}
],
"duration": 11700
}
The Tournament
type is shared between the ~/v3/api/tournaments
and ~/v3/api/tournaments/{tournament-id}
responses. However the ~/v3/api/tournaments
endpoint only returns a partial representation of the Tournament
object, where some of the properties have been voluntarily omitted.
Tournament Common Properties
The following properties are present in both the ~/v3/api/tournaments
and ~/v3/api/tournaments/{tournament-id}
responses.
Property | Required? | Type | Description |
---|---|---|---|
name |
Required | String | Name of the tournament. Not localized. |
type |
Required | String | Scheduled or SitAndGo . See below for details. |
game_category |
Required | String | Can be one of classicslots , videoslots , videopokers , tablegames or other . |
status |
Required | String | Can be one of Created , RegistrationOpened , Started , Finishing , Finished or Canceled . See below for details. |
status_change_date |
Optional | Date | UTC Date using ISO 8601 format (yyyy-MM-ddThh:mm:15Z ). See below for details. |
player_counts |
Required | PlayerCount | Provide the current, min and max number of players for the tournament. |
registrations |
Required | Registration | Provide details about the registration status. |
registration_options |
Required | Array | Describe how to register for the tournament. |
prize_pool |
Required | PrizePool | Details about the prizes. |
rebuys |
Optional | RebuysStatus | Details about tournament rebuys. Omitted if rebuys are disabled for the tournament. |
_links |
Required | LinkCollection | Links for the tournament. See below for details. |
Tournament Detailed Properties
The following properties are only returned by the ~/v3/api/tournaments/{tournament-id}
endpoint. They can be obtained by performing an extra request using the _self
link.
Property | Required? | Type | Description |
---|---|---|---|
description |
Required | String | Non-localized description of the tournament. |
credits |
Required | Money | Starting credits for the tournament. Using XTC currency. |
leaderboard |
Optional | Array | List of players. This property is missing before the tournament starts. |
player |
Optional | Player | Tournament specifics information about the player. This property is missing before the tournament starts, or if the player has not joined the tournament. |
games |
Required | Array | List of playable games for this tournament. Include a play_tournament launch URL. |
prizes |
Required | Array | List of all prizes and qualifying ranks. |
duration |
Required | Integer | Duration of tournament in seconds. This a constant value set during the creation of the tournament. |
Type and Status
The different
status
values for Tournaments
+----------------------+ Does not exist
<---+ Created | for SitAndGo
| +----------+-----------+
| |
| v
| +----------+-----------+ No status_change_date
<---+ RegistrationOpened | for SitAndGo
| +----------+-----------+
| |
| v
| +----------+-----------+
<---+ Started |
| +----------+-----------+
| |
| v
| +----------+-----------+ Transitory status (<1min)
<---+ Finishing | No status_change_date
| +----------+-----------+
| |
| v
| +----------+-----------+ status_change_date
| | Finished | in the past
| +----------------------+
|
|
| +----------------------+
+---> Canceled | exceptional status
+----------------------+ No status_change_date
There are two types of tournaments, as defined by the type
property:
Scheduled
tournaments, which have a fixed start date.SitAndGo
tournaments, which can start as soon as the minimum number of players indicated in theplayer_counts
property is reached.
The status
property describes the current state of the tournament. The meaning of the status_change_date
property depends on it.
status |
Meaning of status_change_date |
Description |
---|---|---|
Created |
When the tournament becomes registration_opened |
This status only applies to Scheduled tournaments. It indicates that the tournament is not yet opened for registrations. |
RegistrationOpened |
When the tournament becomes started |
The tournament accepts registration and has not yet started. The status_change_date is missing for SitAndGo tournaments. |
Started |
When the tournament becomes finishing |
The tournament is in progress. It no longer accepts registrations. |
Finishing |
None | The tournament has just finished. However, the final computations for the prizes have not yet been completed. This status is transitory and typically lasts less than 30 seconds. |
Finished |
Past date. When the tournament became finished |
The tournament has finished. The winners and different prizes are known. |
Canceled |
None | The tournament was canceled. |
Links
Tournament links
{
"_links": {
"_self": {
"href": "https://www.example.com/v3/api/tournaments/123"
},
"register": {
"method": "POST",
"href": "https://www.example.com/v3/api/tournaments/123/registration"
},
"unregister": {
"method": "DELETE",
"href": "https://www.example.com/v3/api/tournaments/123/registration"
},
"rebuy": {
"href": "https://api.example.com/v3/api/tournaments/567/rebuys",
"method": "POST"
}
}
}
These are the API links available for each tournament
Link | Required? | Description |
---|---|---|
_self |
Required | Provide a link to the detailed description of the tournament. Currently links to ~/v3/api/tournaments/{tournament-id} . |
register |
Required | Link to register the player to the tournament. Currently links to ~/v3/api/tournaments/{tournament-id}/registration . |
unregister |
Required | Link to unregister the player from the tournament. Currently links to ~/v3/api/tournaments/{tournament-id}/registration . |
rebuy |
Required | Link to purchase a rebuy in the tournament. Currently links to ~/v3/api/tournaments/{tournament-id}/rebuy . |
Registration
Example of
Registration
"registration": {
"status": "Registered"
}
The Registration
type only contains a status
property.
Property | Required? | Type | Description |
---|---|---|---|
status |
Required | String | Can be one of None , Registered or SignOn . |
The following states are possible for the status
property:
None
means that the player is not registered for the tournament.Registered
means that the player is registered for the tournament.SignOn
means that the player is already registered for the tournament, but with a different brand from the same brand group.
Registration Options
Example showing all available Registration Options
{
"registration_options": [
{
"type": "Bonus"
},
{
"type": "Cash",
"fee": { "currency": "USD", "amount": 50000, "exponent": 2 },
"buy_in": { "currency": "USD", "amount": 10000, "exponent": 2 }
},
{
"type": "Loyalty",
"cost": 100
}
]
}
The registration_options
property returns an Array of RegistrationOption
objects. The presence of a RegistrationOption
in the array denotes that this method of registration is available. Reciprocally, its absence means it is not available.
There are three types of registration options available at the moment:
Cash
. The player must pay both afee
and somebuy_in
money with credits taken from his real money balance, in order to register.Bonus
. The player must use a bonus code to register.Loyalty
. The player must pay thecost
with loyalty points to register.
The following properties may appear on the RegistrationOption
object, depending on the type
:
Property | Required for type ? |
Type | Description |
---|---|---|---|
type |
All | String | Can be one of Cash , Bonus , Loyalty |
fee |
Cash |
Money | The fee in real credits, the player is required to pay to register. |
buy_in |
Cash |
Money | The buy in money in real credits, the player is required to pay. This get turned into the starting balance at the beginning of the tournament. |
cost |
Loyalty |
Integer | Number of loyalty points the player must pay to register. |
Player Counts
Example of Scheduled tournament
player_counts
{
"player_counts": {
"registered": 2,
"minimum": 5,
"maximum": 10
}
}
The PlayerCount
object provides information about the number of players registered for the tournament. It contains the following properties:
Property | Required? | Type | Description |
---|---|---|---|
registered |
Required | Integer | Number of players that have currently registered for the tournament. |
minimum |
Required | Integer | The minimum number of players that must register, before the tournament is allowed to start. |
maximum |
Required | Integer | The maximum number of players that can be registered for the tournament. |
Player
Example of
Player
object used in tournaments.
{
"player":
{
"nickname": "User123",
"rank" : 1,
"credits": {
"currency": "XTC",
"amount": 88800,
"exponent": 2
},
"win_amount": {
"currency": "USD",
"amount": 20000,
"exponent": 2
},
"is_active": true
}
}
Player
objects are returned in the leaderboard
and player
properties of the detailed Tournament
object. They provide information about a player for a specific tournament.
Property | Required? | Type | Description |
---|---|---|---|
nickname |
Required | String | The nickname of the player. |
credits |
Required | Money | Current tournament credits expressed in XTC currency. |
rank |
Required | Integer | Current rank in the tournament. There can be more than one player with the same rank, and some ranks may be skipped. |
win_amount |
Required | Money | The prize money expressed in real currency. |
is_active |
Required | Boolean | Whether the player is actively playing in the tournament. |
Game
Partial
Game
type used in tournaments.
{
"slug": "aladdins-loot-slot",
"name": "Aladdin's Loot",
"locale": "en-US",
"category": "videoslots",
"platform": "html",
"_actions": {
"play_tournament": {
"href": "https://www.example.com/en-US/play/tournamentHtml/AladdinsLootSlot?sessionid=rLDtN485Ur5qN0k6%2BjRm%2B6480uAWl6%2BuAAGuEon9%2BPE%3D&usertoken=x%2FzIoFHScLEtiw8mJ0lrAT7%3DI9QJOQ%3D%3D&email=player@example.com&returnurl=https%3A%2F%2Fwww.example.com%2FTournament.html&tournamentId=2699&sig=1asyu23rfycmx3u777cuqbeip4gh35pzvhh6e3mx2gv44r4bss5dq",
"method": "GET"
}
}
}
Game
objects are returned as part of the games
array provided by the detailed Tournament
object.
These Game
objects are partial representations of the Game
type used by the ~/v3/api/games
and ~/v3/api/games/{game-id}
endpoints.
Each game
is guaranteed to contain a play_tournament
actions which can be used to launch the game in the tournament. It is the responsibility of the caller to ensure the tournament is running before following the play_tournament
action.
Prize Pool
Example of
PrizePool
{
"prize_pool": {
"type": "TotalPrizePool",
"minimum": { "currency": "USD", "amount": 500000, "exponent": 2 },
"current": { "currency": "USD", "amount": 300000, "exponent": 2 }
}
}
The PrizePool
object is returned in the prize_pool
property of the Tournament
object. It provides details about the prize pool available to the winners of the tournament.
There are two types of prize pools:
TotalPrizePool
. The amount of the prizes depend on the number of players participating in the tournament. In this case thecurrent
value varies. But it is guaranteed that a player can win at leastminimum
.FixedAmounts
. The amount for the prizes is fixed. In this case thecurrent
andminimum
value are the same.
The PrizePool
types provides the following properties:
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | String | Can be either TotalPrizePool or FixedAmounts . |
minimum |
Required | Money | The minimum value the prize pool reaches before the tournament starts. |
current |
Required | Money | The current value of the prize pool. |
Prize
Example of
Prize
used in tournaments.
{
"rank": 1,
"minimum": {
"currency": "USD",
"amount": 500000,
"exponent": 2
},
"current": {
"currency": "USD",
"amount": 550000,
"exponent": 2
}
}
The Prize
object is returned in the prizes
properties of the detailed Tournament
response. It provides information about the prizes which can be won for a specific tournament.
There are two types of prize pools:
TotalPrizePool
. The amount of the prizes depend on the number of players participating in the tournament. In this case thecurrent
value varies. But it is guaranteed that a player can win at leastminimum
.FixedAmounts
. The amount for the prizes is fixed. In this case thecurrent
andminimum
value are the same.
Property | Required? | Type | Description |
---|---|---|---|
rank |
Required | String | The rank required to achieve this prize. |
minimum |
Required | Money | Minimum amount that can be won from this prize. |
current |
Required | Money | The current amount this prize will award. |
Rebuys Status
Example of
RebuysStatus
used in tournaments.
{
"is_allowed": false,
"use_count": 0,
"max_use_count": 5,
"purchase_options": [ {
"type": "Cash",
"cost": {"currency": "USD", "amount": 5000, "exponent": 2}
}]
}
Property | Required? | Type | Description |
---|---|---|---|
is_allowed |
Required | Boolean | Whether the player is allowed to purchase a rebuy or not. |
use_count |
Required | Number | Positive integer starting at 0 . Number of rebuy purchased by the player so far. |
max_use_count |
Required | Number | Positive integer strictly greater than 0 . Maximum number of rebuys that a player can purchase. |
purchase_options |
Required | Array of RebuyPurchase |
Not empty. Purchasing options for the rebuys. Currently only Cash purchases are supported. |
Rebuy Purchase
Example of RebuyPurchase. Only
Cash
is supported at the moment.
[
{
"type": "Cash",
"cost": {"currency": "USD", "amount": 5000, "exponent": 2}
}]
}
Property | Required? | Type | Description |
---|---|---|---|
type |
Required | Cash |
Always set to Cash . |
cost |
Optional | Money | Present when type is set to Cash . Cash cost for purchasing a rebuy. |
Competitions
Get Competitions
This endpoint returns the list of live competitions for the current brand, or optionally, all brands.
GET ~/v3/api/competitions
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {{access_token}" \
"http://example.com/v3/api/competitions"
$.ajax({
"url": "http://example.com/v3/api/competitions",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {{access_token}}"
}
});
Response:
{
"competitions":
[
{
"id": 1,
"name": "Sample Competition 1",
"end_date": "2010-04-30T00:00:00Z",
"start_date": "2010-04-01T00:00:00Z"
},
{
"id": 2,
"name": "Sample Competition 2",
"end_date": "2010-05-31T00:00:00Z",
"start_date": "2010-05-01T00:00:00Z"
}
]
}
HTTP Request
GET ~/v3/api/competitions?all={true|false}
HTTP Method | GET |
Path | ~/v3/api/competitions |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials , player_credentials or leaderboard |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
all |
Optional | Boolean | Default to false if not specified, and returns the list of the competitions for the current brand group.If true , returns all competitions for all brand groups. |
HTTP Response
The endpoint returns an array of competitions
Property | Required? | Type | Description |
---|---|---|---|
competitions |
Mandatory | Array | Array of Competitions in no particular order. |
Competitions
Property | Required? | Type | Description |
---|---|---|---|
id |
Mandatory | Integer | Identifier of competition. Not suitable for display. Strictly positive. |
name |
Mandatory | String | Name of the competiton. Can be displayed to players. |
brand_group |
Optional* | String | Internal name of brand group the competition belongs to. Not suitable for display. This parameter is only provided if ?all=true is provided. |
start_date |
Mandatory | String | Start date of competition in ISO 8601 format (yyyy-mmddThh:mm:ssZ ) using UTC time zone. |
end_date |
Mandatory | String | End date of competition in ISO 8601 format (yyyy-mmddThh:mm:ssZ ) and UTC time zone. |
Get Leaderboard
This endpoint retrieves the leaderboard associated to a competition.
GET ~/v3/api/competitions/{competitionIds}/leaderboard?limit={limit}
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {{access_token}" \
"http://example.com/v3/api/competitions/1,2,3,4/leaderboard?limit=2"
$.ajax({
"url": "http://example.com/v3/api/competitions/1,2,3,4/leaderboard?limit=2",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {{access_token}}"
}
});
The endpoint optionally support creating composite leaderboards, merged from multiple competitions from different brand groups. This behavior is triggerred by passing multiple comma separated IDs into the
{competitionsId}
path parameter. The algorithm uses the email address of players as a criteria to consolidate players from different competitions into a single player in the composite leaderboard.When the
player_crendentials
grant type is used, the endpoint may return information about the current player’s rank in the leaderboard. This occurs if the player has registered for any of the requested competitions. The endpoint may also return a handful of players above and below the current player. There could be a hole in the returned leaderboard, if the player rank is below the requestedlimit
.
Response for
public_brand_credentials
{
"competition_ids": [1, 2, 3, 4],
"leaderboard": [
{
"nickname": "FirstPlayer",
"ranking": 1,
"score": 1000000
},
{
"nickname": "SecondPlayer",
"ranking": 2,
"score": 500
}
]
}
Response for
player_credentials
{
"competition_ids": [1, 2, 3, 4],
"leaderboard": [
{
"nickname": "FirstPlayer",
"ranking": 1,
"score": 1000000
},
{
"nickname": "SecondPlayer",
"ranking": 2,
"score": 500
},
{
"nickname": "BreforeMe",
"ranking": 49,
"score": 50
},
{
"nickname": "Me",
"ranking": 50,
"score": 40
},
{
"nickname": "AfterMe",
"ranking": 51,
"score": 41
}
],
"player": {
"nickname": "Me",
"ranking": 50,
"score": 40
}
}
HTTP Request
GET ~/v3/api/competitions/1,2,3/leaderboard?limit=100
HTTP Method | GET |
Path | ~/v3/api/competitions/{competitionIds}/leaderboard?limit={limit} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials , player_credentials or leaderboard |
Path Parameters
The following parameters are provided in the URL path.
Parameter | Required? | Type | Description |
---|---|---|---|
competitionIds |
Mandatory | String | A comma separated list of competitions IDs. |
Query Parameters
Parameter | Required? | Type | Description |
---|---|---|---|
limit |
Optional | Integer | Limit the size of the returned leaderboard. Minimum 1 and maximum 500 .If the limit is not provided it defaults to 100 . |
HTTP Response
This endpoint returns the leaderboard of the competitions and, optionally, information about the current player.
Property | Required? | Type | Description |
---|---|---|---|
competition_ids |
Mandatory | Array of Integers | The competitions IDs used to compute the leaderboard. Values may be returned in a different order than provided in the request. |
leaderboard |
Mandatory | Array of Players | Array of players from highest to lowest ranking. The array may be empty. |
player |
Optional | Player | Information about the current player. This is only returned if the grant type is player_credentials and the current player has joined any of the requested competitions. |
Player
Property | Required? | Type | Description |
---|---|---|---|
nickname |
Mandatory | String | Nickname of player. |
ranking |
Mandatory | Positive Integer | Position of player in leaderboard. The highest rank is 1 . |
score |
Mandatory | Positive Integer | Total score of player. |
Bonus
Claim a Bonus
Claim a bonus code for the player.
HTTP Request
POST ~/v3/api/bonuses/claim
HTTP Method | POST |
Path | ~/v3/api/bonuses/claim |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Rate Limits | 1 request per second; 10 requests per minute |
POST ~/v3/api/bonuses/claim
curl -X POST 'http://example.com/v3/api/bonuses/claim' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer CfDJ8...' \
--header 'Content-Type: application/json' \
--data-raw '{
"bonus_code": "BONUS_CODE"
}'
var payload = { bonus_code: "BONUS_CODE" };
$.ajax({
"url": "http://example.com/v3/api/bonuses/claim",
"method": "POST",
"timeout": 0,
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com",
"Authorization": "Bearer CfDJ8...",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload),
};
Campaign claim
curl -X POST 'http://example.com/v3/api/bonuses/claim' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer CfDJ8...' \
--header 'Content-Type: application/json' \
--data-raw '{
"campaign": {
"campaign_id" : 1,
"type" : "invite"
}
}'
var payload = {
campaign: {
campaign_id : 1,
type : "invite"
}
};
$.ajax({
"url": "http://example.com/v3/api/bonuses/claim",
"method": "POST",
"timeout": 0,
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com",
"Authorization": "Bearer CfDJ8...",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload),
};
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
bonus_code |
Optional | String | The bonus code associated to the bonus. Minimum 5 characters, maximum 30 characters. |
invite_code |
Optional | String | The invite code associated to the bonus and specific to the player. Exactly 6 characters. Only applicable if bonus code is supplied. |
campaign |
Optional | Campaign | Campaign object to identify the campaign. When supplied, the player will have tags applied and the bonus on the campaign will be claimed. |
Success Response
{
"bonus_code": "BONUS_CODE",
"claim_status": "AwaitingDeposit"
}
Error Response
{
"error": "bonus_invalid",
"error_description": "The Bonus Code is not valid."
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
bonus_code |
Required | String | Convenience. Same bonus_code as provided in request. |
claim_status |
Required | String | Either Claimed or AwaitingDeposit depending on the type of bonus. |
Filter Bonus Codes
This endpoint can be used to filter out bonus codes that definitely cannot be claimed by a player.
The request takes a small number of bonus codes to check, and the response only contains the ones that may be claimable.
This endpoint performs a more lightweight test than the one performed by the claim endpoint.
HTTP Request
POST ~/v3/api/bonuses/filter
HTTP Method | POST |
Path | ~/v3/api/bonuses/filter |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
POST ~/v3/api/bonuses/filter
curl -X POST 'http://example.com/v3/api/bonuses/filter' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer CfDJ8...' \
--header 'Content-Type: application/json' \
--data-raw '{
"bonus_codes": ["BONUS_CODE", "ANOTHER_BONUS_CODE"]
}'
var payload = { bonus_codes: ["BONUS_CODE", "ANOTHER_BONUS_CODE"] };
$.ajax({
"url": "http://example.com/v3/api/bonuses/filter",
"method": "POST",
"timeout": 0,
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com",
"Authorization": "Bearer CfDJ8...",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload),
};
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
bonus_codes |
Required | Array of String | Array of bonus codes to filter. Maximum 50 bonus codes. Each code must be minimum 5 characters and maximum 30 characters long. |
Response with a Claimable Bonus
{
"claimable_bonus_codes": ["BONUS_CODE"]
}
Response without any Claimable Bonuses
{
"claimable_bonus_codes": []
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
claimable_bonus_codes |
Required | Array of Strings | Filtered out array of claimable codes from the request. This array may be empty. |
Campaign
Example of
Campaign
.
{
"campaign_id": 1,
"type": "invite"
}
Property | Required? | Type | Description |
---|---|---|---|
campaign_id |
Required | Number | Positive integer identifying the campaign. |
type |
Required | String | Currently must be set to invite . |
Progressives
Get Games and Jackpots
Get the list of progressive games and their associated jackpot values.
GET ~/v3/api/progressives/games
curl -X GET 'http://example.com/v3/api/progressives/games' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer CfDJ8...' \
--header 'Content-Type: application/json'
var payload = { bonus_code: "BONUS_CODE" };
$.ajax({
"url": "http://example.com/v3/api/progressives/games",
"method": "GET",
"timeout": 0,
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com",
"Authorization": "Bearer CfDJ8...",
"Content-Type": "application/json"
}
};
HTTP Request
GET ~/v3/api/progressives/games
HTTP Method | GET |
Path | ~/v3/api/progressives/games |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials or brand_public_credentials |
Success Response
{
"games": [
{
"game_slug": "some-fancy-game",
"currencies": [ "EUR", "USD", "CAD", "SEK", "NOK", "DKK", "NZD" ],
"jackpots": [
{
"id": "FancyGameJackpot",
"current": 2307170,
"increment_value": 1,
"increment_interval": 2,
"timestamp": "2022-04-27T12:05:01Z"
}
]
}
]
}
HTTP Response
The response returns an array of Progressive Games. The array may be empty if there are none.
Each Progressive Game is identified using the slug
from the Game object, and each Progressive Game contains one or more Jackpots.
Property | Required? | Type | Description |
---|---|---|---|
games |
Required | Array of Progressive Games | Can be empty if no progressive games exist. There are no explicit guarantees about the order of the array. |
Progressive Game
Progressive Game with Multiple Jackpots
{
"game_slug": "some-fancy-game",
"currencies": [ "EUR", "USD", "CAD", "SEK", "NOK", "DKK", "NZD"],
"jackpots": [
{
"id": "FancyGameMegaJackpot",
"current": 6876551,
"increment_value": 1,
"increment_interval": 1,
"timestamp": "2022-04-27T12:05:01Z"
},
{
"id": "FancyGameMajorJackpot",
"current": 2307170,
"increment_value": 1,
"increment_interval": 2,
"timestamp": "2022-04-27T12:05:01Z"
},
{
"id": "FancyGameMinorJackpot",
"current": 1244903,
"increment_value": 1,
"increment_interval": 3,
"timestamp": "2022-04-27T12:05:01Z"
}
]
}
Property | Required? | Type | Description |
---|---|---|---|
game_slug |
Required | String | The game slug identifying the Game. |
currencies |
Required | Array of String | The array returns a list of supported currencies. It cannot be empty. See the Currencies endpoint to retrieve information about the currencies. |
jackpots |
Required | Array of Jackpots | The array returns all the jackpots for the games. The array cannot be empty and is ordered in decreasing order using the current values of the Jackpots. |
Jackpot
Example of Jackpot
{
"id": "FancyGameMinorJackpot",
"current": 1244903,
"increment_value": 1,
"increment_interval": 3,
"timestamp": "2022-04-27T12:05:01Z"
}
Property | Required? | Type | Description |
---|---|---|---|
id |
Required | String | Alphanumerical identifier for the Jackpot. This ID may be shared between multiple games (see notice below). |
current |
Required | Number | Positive Integer which represents the monetary value at the timestamp moment. Typically jackpot value increase until the jackpot is won and reset. You should use the iso_exponent of the Currency to convert the integer to a decimal value. |
increment_value |
Required | Number | Positive Integer which represents the expected increment of the jackpot value during the increment_interval duration. This is an estimation which should be used to provide animated jackpots. The actual increment may vary, and the jackpot could go down if won. |
increment_interval |
Required | Number | Positive Integer, cannot be 0 . Duration in seconds. |
timestamp |
Required | String | ISO 8601 UTC Date (yyyy-mm-ddThh:mm:ssZ ) of when this information was computed. The API typically cache the Jackpot Information for 30 seconds. |
The above information can be used to display static or animated jackpots. To create an animation, you should rely on the timestamp
, increment_value
, and increment_interval
properties to compute a rate of change and a apply it to the jackpot value. You should also poll the API frequently to retrieve updates so the animate jackpot value does not drift too much. There is no need to poll the endpoint too frequently since the data is cached by the Kore API.
Chats
Get Active Chats
Get the list of active chats.
GET ~/v3/api/chats
curl -X GET 'http://example.com/v3/api/chats' \
--header 'X-Kore-ReturnUrl: http://www.example.com' \
--header 'Authorization: Bearer CfDJ8...' \
--header 'Content-Type: application/json'
var payload = { bonus_code: "BONUS_CODE" };
$.ajax({
"url": "http://example.com/v3/api/chats",
"method": "GET",
"timeout": 0,
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com",
"Authorization": "Bearer CfDJ8...",
"Content-Type": "application/json"
}
};
HTTP Request
GET ~/v3/api/chats
HTTP Method | GET |
Path | ~/v3/api/chats |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Rate Limiting | 1 request per 10 seconds. |
Success Response - No chats
{
"chats": []
}
Success Response - One Chat Available
{
"chats": [
{
"chat_id": "vXnkPsOhsWOqlOeskXQKN2vtdqV1JEqTEQqoDg+O56Ev4Lp8",
"_actions": {
"open_chat": { "href": "http://www.example.com/chat/", "method": "GET" }
},
"is_operator_initiated": true
}
]
}
HTTP Response
The response returns an array of Active Chats. The array may be empty if there are none or it may contain one chat at most, since the API only return active chats. of polling this endpoint
Property | Required? | Type | Description |
---|---|---|---|
chats |
Required | Array of Chats | Can be empty if there are none. |
Chat
Property | Required? | Type | Description |
---|---|---|---|
chat_id |
Required | String | Chat identifier. |
_actions |
Required | LinkCollection | A link collection containing an open_chat action. |
is_operator_initiated |
Required | Boolean | This is true for chat that need to be automatically opened, as initiated by the operator. It can be false for the chats that were opened by the player. |
Referrals
The referrer is the person sharing a referral code and the referee is the person creating a new account and claiming the code. Both can claim bonuses when a referral is successful.
Get Player Referral
This endpoint is used to retrieve the referral code from a signed in player acting as a referrer.
GET ~/v3/api/referrals
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/referrals"
$.ajax({
"url": "http://example.com/v3/api/referrals",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
Response:
{
"referral": {
"referral_code": "q8aaa",
"referrer_bonus": {
"currency": "USD",
"amount": 2000,
"exponent": 2
},
"referee_bonus": [
{
"currency": "USD",
"amount": 2000,
"exponent": 2
}
]
},
"claim_status": {
"unclaimed_referrals_count": 0,
"amount_to_claim": {
"currency": "USD",
"amount": 0,
"exponent": 2
}
}
}
HTTP Request
GET ~/v3/api/referrals
HTTP Method | GET |
Path | ~/v3/api/referrals |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Rate Limits | 100 requests per minute, 500 requests per 10 minutes, 1000 requests per hour. |
HTTP Response
This endpoint returns a single referral
object.
Property | Required? | Type | Description |
---|---|---|---|
referral |
Mandatory | Referral | Return a referral object specific to the signed-in player. |
claim_status |
Mandatory | ReferralClaimStatus | Status of referrer bonus claims for the signed-in player. |
Referral Claim Status
This value represents the amount unclaimed referrer bonus that a player acting as a referrer can claim.
Every time a new player registers using the referrer’s referral code, the unclaimed_referrals_count
is incremented by 1
, and the amount_to_claim
is incremented by the referrer_bonus
amount.
Property | Required? | Type | Description |
---|---|---|---|
unclaimed_referrals_count |
Mandatory | Number | Unsigned integer. Set to 0 if nothing to claim. |
amount_to_claim |
Mandatory | Money | Total amount that can be claimed by the player. May be 0 . |
Get Referral Code Info
This endpoint is used to retrieve information about a referral code. It can be used to implement a referral page which can be used by referees.
GET ~/v3/api/referrals/{referral_code}
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {player_token}" \
"http://example.com/v3/api/referrals/{referral_code}"
$.ajax({
"url": "http://example.com/v3/api/referrals/{referral_code}",
"method": "GET",
"headers": {
"x-kore-returnurl": "http://www.example.com/"
"authorization" : "bearer {player_token}"
}
});
Response:
{
"referral": {
"referral_code": "q8aaa",
"referrer_bonus": {
"currency": "USD",
"amount": 2000,
"exponent": 2
},
"referee_bonus": [
{
"currency": "USD",
"amount": 2000,
"exponent": 2
},
{
"currency": "GBP",
"amount": 2000,
"exponent": 2
},
{
"currency": "EUR",
"amount": 2000,
"exponent": 2
}
]
},
"locale": "en-US"
}
HTTP Request
GET ~/v3/api/referrals/{referral_code}
HTTP Method | GET |
Path | ~/v3/api/referrals/{referral_code} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials or player_credentials |
Rate Limits | 100 requests per minute, 500 requests per 10 minutes, 1500 requests per hour. |
HTTP Response
This endpoint returns a single referral
object.
Property | Required? | Type | Description |
---|---|---|---|
referral |
Mandatory | Referral | Return a referral object specific to the referral code. |
locale |
Mandatory | String | The locale of the referrer. |
Claim Referral Bonus
This endpoint can be used by either the referrer of the referee to claim either the referrer bonus or the referee bonus.
HTTP Request
POST ~/v3/api/referrals/claim
HTTP Method | POST |
Path | ~/v3/api/referrals/claim |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | player_credentials |
Rate Limits | 50 requests per minute, 250 requests per 10 minutes, 750 requests per hour. |
POST ~/v3/api/referrals/claim
curl -X POST \
http://example.com/v3/api/referrals/claim \
-H "Authorization: Bearer {{access_token}" \
-H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-d '{ \
"claim_type": "referee", \
"referral_code": "2qaaa" \
}'
var payload = {
claim_type: "referee",
referral_code: "2qaaa"
}
$.ajax({
"url": "http://example.com/v3/api/referrals/claim",
"method": "POST",
"headers": {
"x-kore-returnurl": "http://www.example.com/",
"authorization" : "bearer {{access_token}}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
POST Parameters
The parameters must be sent as JSON.
Property | Required? | Type | Description |
---|---|---|---|
claim_type |
Mandatory | String Enum | Either referrrer or referee . |
referral_code |
Optional* | String | Mandatory for referee . Omitted for referrrer . |
Response
{
"referral": {
"claim_type": "referee",
"referral_code": "q8aaa",
"bonus": {
"currency": "USD",
"amount": 2000,
"exponent": 2
}
}
}
HTTP Response
If the claim is successful, the endpoint returns a response object. Otherwise, the endpoint may return an error such as referral_claim_exhausted
or referral_claim_failed
.
Property | Required? | Type | Description |
---|---|---|---|
referral_code |
Mandatory | String | The referral code of the claim. |
claim_type |
Mandatory | String Enum | Either referrrer or referee . Same as request. |
bonus |
Mandatory | Money | The amount credited to the bonus balance. |
Referral
Example of Referral
{
"referral": {
"referral_code": "q8aaa",
"referrer_bonus": {
"currency": "USD",
"amount": 2000,
"exponent": 2
},
"referee_bonus": [
{
"currency": "USD",
"amount": 2000,
"exponent": 2
},
{
"currency": "GBP",
"amount": 2000,
"exponent": 2
},
{
"currency": "EUR",
"amount": 2000,
"exponent": 2
}
]
}
}
The Referral
model type is shared by both the GET ~/v3/api/referrals
and GET ~/v3/api/referrals/{referral_code}
endpoints.
Property | Required? | Type | Description |
---|---|---|---|
referral_code |
Mandatory | String | A short alphanumerical ASCII string. |
referrer_bonus |
Mandatory | Money | The referrer’s bonus expressed in the referrer’s currency. |
referee_bonus |
Mandatory | An array of Money | The referee’s bonus values expressed in all acceptable referee’s currencies. |
.
SignalR Notifications
Connection
// Ensure you have a bearer token
assert(credential);
// Connect using Web Sockets
const notification_hub_connection = new HubConnectionBuilder()
.withUrl("https://kore.example.com/v3/api/notifications", {
skipNegotiation: true,
transport: HttpTransportType.WebSockets,
accessTokenFactory: () => credential
})
.withAutomaticReconnect()
.build();
// Subscribe to closure notifications
notification_hub_connection.onclose(error => {
console.info("Received WebSocket Closure Error Message");
console.info(error);
});
// Subscribe to specific message from Kore
notification_hub_connection.on("message", notificationMessage => {
// Do something
});
// Start connection
try {
await notification_hub_connection.start();
} catch (connection_error) {
console.error("Cannot start");
}
The menu can connect to the API using SignalR to receive live notifications.
Request
GET ~/v3/notifications
HTTP Method | WebSocket - SignalR |
Path | ~/v3/api/notifications |
Required Headers | None. Headers not supported by WebSockets |
Grant Type | player_credentials |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
access_token |
Required | string | The bearer token with a player_credentials grant type. |
HTTP Response
In case of success the HTTP responses uses the HTTP Status 101
to switch to a WebSocket. SignalR may also negociate an alternate transport layer which is not documented here.
In case of error, the WebSocket/HubConnection returns an error
event which may be mapped to a standard error object. When using SignalR the object is typically returned as a promise errors either when awaiting start()
or invoke()
methods.
Lifetime
SignalR provides an onclose()
notification when the WebSocket / SignalR channel is closed permanently.
OperatorInitiatedChat
The OperatorInitiatedChat
message is sent whenever the operator wishes to initiate a chat session with the player. The client should open and display the chat window (unless one is already opened).
Subscribe to notification
notification_hub_connection.on("OperatorInitiatedChat", notificationMessage => {
// Do something
});
Summary
Message Name | OperatorInitiatedChat |
Grant Type | player_credentials |
Direction | From Kore to Browser |
OperatorInitiatedChatNotification message
{
"chat_url": "http://www.example.com/chat/",
"secure_chat_id": "vXnkPsOhsWOqlOeskXQKN2vtdqV1JEqTEQqoDg+O56Ev4Lp8"
}
Model
Property | Required? | Type | Description |
---|---|---|---|
chat_url |
Required | URL Template | The URL to open the chat in the IFrame. It requires processing (see below). |
secure_chat_id |
Required | String | An opaque string identifying the chat. The client can use this type to identify whether the chat was already opened. |
The information returned by this message is similar to the operator_initiated_chats
object returned by the GET ~/v3/api/chats
endpoint, but it is in slightly different format.
UserLogout
The UserLogout
message is sent whenever the player session becomes invalid. This occurs when the player explicitely signs out or signs in on a different browser/tab/device (single-sign-on).
Subscribe to notification
notification_hub_connection.on("UserLogout", notificationMessage => {
// Do something
});
Summary
Message Name | UserLogout |
Grant Type | player_credentials |
Direction | From Kore to Browser |
UserLogout message
{}
Model
The UserLogout
message is empty and contains no properties at present.
BalanceUpdate
The BalanceUpdate
message is sent whenever there is a need to update the player’s balances.
Subscribe to notification
notification_hub_connection.on("BalanceUpdate", notificationMessage => {
// Do something
});
Summary
Message Name | BalanceUpdate |
Grant Type | player_credentials |
Direction | From Kore to Browser |
BalanceUpdate message
{
"balance":{"currency":"ZAR","amount":960000,"exponent":2},
"cash_balance":{"currency":"ZAR","amount":0,"exponent":2},
"bonus_balance":null
}
Model
Property | Required? | Type | Description |
---|---|---|---|
balance |
Required | Money | Balance of the user. |
cash_balance |
Optional | Money | Cash balance of the user. |
bonus_balance |
Optional | Money | Bonus balance of the user. |
IFrame Support
The games from saucify
, genii
, and go
support being run in IFrames on all supported browsers.
The blocking of third party cookies is also fully supported. Safari blocks third party cookies by default and Chrome is expected to do the same by 2022.
Hosting Requirements
Minimal implementation of hosting protocol
// Make sure we can receive requests from the iFrame
window.addEventListener("message", e => onMessage(e), false);
// Message handler
function onMessage(event: MessageEvent)
{
// Validate message is from a trusted source (i.e. the iFrame)
if (event.source !== iframe.contentWindow)
return;
// Handle protocol
switch (event.data.message) {
// [...]
}
}
The parent window should size the IFrames appropriately so that the games can be played. We recommend that the smaller dimension (width or height) of the IFrame should be no smaller than 400
CSS pixel. IFrame dimensions which are less than 20
CSS pixels (and in particular 0
), even for a short period of time, are not supported.
The parent window should detect when the IFrame navigates to the X-Kore-ReturnUrl
URL. When this occurs, the parent window should redirect the top window to the URL instead of letting the IFrame navigation complete. This can be implemented by subscribing to the load
event on the iframe
element. You can see an example of this implementation in the GameFrame.onLoad()
method of the Demo site.
The parent window must implement the IFrame protocol described below. The protocol makes use of objects exchanged via window.postMessage()
. The requests are sent by the IFrame and received by the parent frame, and the responses are sent back to the IFrame. Not implementing the protocol leads to a degraded user experience, especially on browsers which block third party cookies. When implementing the protocol, it is very important to validate that the source of the message is indeed the game hosted in the iFrame (see GameFrame.tsx
).
saveCookie
Request Save Cookie
{
"message": "saveCookie",
"payload": {
"resolution": {
"width": 1680,
"height": 1050
},
"di": "cac05e36-0f4b-4e98-a2a2-09a4f821361b",
"fx": {
"muted": true,
"volume": 1
},
"music": {
"muted": true,
"volume": 1
}
}
}
Request Delete Cookie
{
"message": "saveCookie",
"payload": null
}
The IFrame uses this request to ask the parent window to save some persistent information on its behalf. The parent window is free to choose any means to persist the payload
. The demo site uses a dedicated cookie.
Request
Property | Required? | Type | Description |
---|---|---|---|
message |
Required | String | Set to saveCookie |
payload |
Required | JavaScript Object | The payload to store in a cookie. If the payload is null the cookie should be deleted. |
Response
No response expected.
loadCookie
Request
{
"message": "loadCookie"
}
Response (no cookie)
{
"message": "loadCookieResponse",
"payload": null
}
Response (cookie)
{
"message": "loadCookieResponse",
"payload": {
"resolution": {
"width": 1680,
"height": 1050
},
"di": "cac05e36-0f4b-4e98-a2a2-09a4f821361b",
"fx": {
"muted": true,
"volume": 1
},
"music": {
"muted": true,
"volume": 1
}
}
}
The IFrame uses this request to ask the window frame to load a previously saved cookie (via saveCookie
).
Request
Property | Required? | Type | Description |
---|---|---|---|
message |
Required | String | Set to loadCookie |
Response
Property | Required? | Type | Description |
---|---|---|---|
message |
Required | String | Set to loadCookieResponse |
payload |
Required | JavaScript Object | The payload stored by a previous call to saveCookie , or null if nothing was saved. |
openUrl
Request
{
"message": "openUrl",
"url": "https://www.example.com/cashier"
}
The iFrame uses this request to ask the parent window to open a URL as a top URL. This is used to open Cashier URLs for instance, as many deposit processors require cookies to be fully supported, and will not work on browsers that block third party cookies.
Request
Property | Required? | Type | Description |
---|---|---|---|
message |
Required | String | Set to openUrl |
url |
Required | String | The URL to open. |
Response
No responses expected.
APK
Kore supports integration with an Android App. The App is side loaded as a signed APK. The download link is provided by the GET ~/v3/api/users
endpoint.
In order to support push notifications, the menu shall notify the APK every time a player successfully signs in or signs out. This is done by calling specific methods on the window.app_v1
object exposed by the APK.
APK Tracking
The menu is not expected to perform any supporting task in order to perform integration between the Affiliate Tracking system and the APK.
The following section is purely informational and describes the affiliate tracking flow:
- Upon landing on the site, the menu provides a Tracking Context to the authentication endpoint. This may include a
TrackingToken
parameter associated to an affiliate campaign. - The Kore API returns an authentication token and a
tracking_id
. - The Kore API provides an
apk_installer
download link that includes thetracking_id
as a query parameter. - The download URL points to Branch IO. The
tracking_id
is appended as a query parameter. - On first startup, the APK uses the Branch IO SDK to retrieve the
tracking_id
and stores it in persistent storage. On subsequent startups, the value is retrieved from persistent storage. - On startup, the APK injects
tracking_id
into the menu URL, as a query parameter. - The menu provides the
url
via the Tracking Context. The Kore API automatically extracts thetracking_id
. - The player registers and the tracking information from step 1 is retrieved, and the player is associated to the appopriate affiliate campaign.
app_v1
The APK exposes a app_v1
JavaScript object inside the window
global object. The window.app_v1
object is used for communicating between the menu and the APK.
The object is versioned by the _v1
suffix. It is expected that if the protocol is updated in a way that breaks backward compatibility, we would expose an app_v2
object instead.
All parameters are passed as JSON objects.
onLogin
Whenever the menu performs a successful player sign in, the APK must be notified.
Notify APK after successful sign in
try {
window.app_v1?.onLogin({email: "bob@example.com"});
} catch (err) {
// TODO: Log error
console.error(err);
}
Request
Property | Required? | Type | Description |
---|---|---|---|
email |
Required | String | Email address of the player that just signed in. |
onLogout
Whenever the menu performs a successful player sign out, the APK must be notified.
This call should follow a succesful use of the DELETE ~/v3/api/auth/player_credentials
endpoint.
Notify APK after successful sign out
try {
// CAUTION: Pass empty object below!
window.app_v1?.onLogout({});
} catch (err) {
// TODO: Log error
console.error(err);
}
User Activity
Get Activity Summaries
This endpoint can be used to access user activity summaries which are compiled daily. Only activity summaries of completed days or the current day can be queried. Days start at 00:00 UTC and end at 23:59 UTC.
GET ~/v3/api/users/summaries?date=2018-12-25
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {privileged_token}" \
"http://example.com/v3/api/users/summaries?2018-12-25"
$.ajax({
"url": "http://example.com/v3/api/users/summaries?2018-12-25",
"method": "GET",
"headers": {
"authorization" : "bearer {privileged_token}"
}
});
HTTP Request
GET ~/v3/api/summaries
HTTP Method | GET |
Path | ~/v3/api/users/summaries |
Required Headers | Content-Type , Authorization |
Grant Type | brand_credentials or restricted_activity_subscriber |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
date |
Required | String | UTC Date of the summary to access in yyyy-mm-dd format. |
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
summaries |
Required | Array of Summary | Returns an array of user activity summaries. The array may be empty. |
Response (with single summary)
{
"summaries": [
{
"date": "2018-09-11",
"user_id": "H0NT92",
"game_rounds_count": 1,
"total_amount_wagered": {
"cash": {
"currency": "USD",
"amount": 3000,
"exponent": 2
},
"bonus": {
"currency": "USD",
"amount": 0,
"exponent": 2
}
},
"total_amount_paid": {
"cash": {
"currency": "USD",
"amount": 5600,
"exponent": 2
},
"bonus": {
"currency": "USD",
"amount": 0,
"exponent": 2
}
},
"total_amount_chargebacks": {
"currency": "USD",
"amount": 0,
"exponent": 2
},
"has_historical_chargeback": false,
"total_progressive_contributions": {
"currency": "USD",
"decimal_amount": 3.5
},
"total_amount_deposited": {
"currency": "USD",
"amount": 0,
"exponent": 2
},
"total_amount_withdrawn": {
"currency": "USD",
"amount": 20200,
"exponent": 2
},
"successful_deposits_count": 0,
"_links": {
"user": {
"href": "https://example.com/v3/api/users/H0NT92",
"method":"GET"
},
"user_games": {
"href":"https://example.com/v3/api/users/H0NT92/games",
"method":"GET"
}
}
}
]
}
Summary
The Summary
object returned by the GET ~/v3/api/summaries
endpoint is a digest of one user’s activity over the course of a single day.
Property | Required? | Type | Description |
---|---|---|---|
date |
Required | String | UTC date in yyyy-mm-dd format. Date of the summary. |
user_id |
Required | String | System identifier for the user of the summary. |
game_rounds_count |
Required | Number | Positive integer. Number of game rounds played by the user during the day. |
total_amount_wagered |
Required | BonusAndCash see below |
Total amount wagered in the games by the user during the day. |
total_amount_paid |
Required | BonusAndCash see below |
Total amount paid out by the games to the user during the day. |
total_amount_deposited |
Required | Money | Total amount deposited by the user during the day. |
total_amount_chargebacks |
Required | Money | Total amount of credit card chargebacks which occurred during the day. |
has_historical_chargeback |
Required | Boolean | This flag is set to true if there is a charge back on the provided date or any day prior. |
total_progressive_contributions |
Required | DecimalMoney | Total amount of contributions made to progressive games jackpots. The decimal type has a precision of up to 6 decimal places. |
successful_deposits_count |
Required | Number | Positive integer. Number of successful deposits made by the user. |
total_amount_withdrawn |
Required | Money | Total amount withdrawn by the user during the day. This can be negative. See comment below. |
_links |
Required | LinkCollection | A link collection giving access to information about the user and its favorite games. |
Bonus and Cash
The total_amount_wagered
and total_amount_paid
amounts are divided into cash
and bonus
components.
Property | Required? | Type | Description |
---|---|---|---|
bonus |
Required | Money | The bonus monetary amount is linked to the application to a special bonus offer. |
cash |
Required | Money | The cash monetary amount. |
Links
"_links": {
"user": {
"href": "https://example.com/v3/api/users/H0NT92",
"method":"GET"
},
"user_games": {
"href":"https://example.com/v3/api/users/H0NT92/games",
"method":"GET"
}
}
For each summary the following API links are provided.
Link | Required? | Description |
---|---|---|
user |
Required | Link to obtain information about the user. |
user_games |
Required | Link to obtain the user’s list of favorite games. |
Get User Information
This endpoint can be used to retrieve user information about any of the brand players. It is the same endpoint that is used in browser to get user information about the current player. However the information returned is slightly different.
GET ~/v3/api/users/{user_id}
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {privileged_token}" \
"http://example.com/v3/api/users/{user_id}"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}",
"method": "GET",
"headers": {
"authorization" : "bearer {privileged_token}"
}
});
HTTP Request
GET ~/v3/api/users/{user_id}
HTTP Method | GET |
Path | ~/v3/api/users/{user_id} |
Required Headers | Content-Type , Authorization |
Grant Type | brand_credentials or restricted_activity_subscriber |
Response:
{
"user_id": "H0NT92",
"registration_date": "2011-08-10T08:35:02Z",
"profile": "VIP",
"locale": "en-US",
"country": "US",
"my_affiliates_token": "track-me-not",
"cash_balance": {
"currency": "USD",
"amount": 86405197,
"exponent": 2
},
"bonus_balance": {
"currency": "USD",
"amount": 0,
"exponent": 2
},
"mobile_phone": "+1 803 1234 1234",
"email": "stevec@example.com",
"firstname": "Steve",
"lastname": "Courteney",
"nickname": "StevieC",
"has_deposited": true,
"_links": {
"_self": {
"href": "https://example.com/v3/api/users/H0NT92",
"method": "GET"
},
"games": {
"href": "https://example.com/v3/api/users/H0NT92/games",
"method": "GET"
}
}
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
user_id |
Required | String | Unique identifier for the user. |
registration_date |
Required | String | Registration date. The date uses ISO 8601 format and uses the UTC time zone. |
profile |
Required | User Profile | The profile of the user. |
locale |
Required | String | The preferred locale of the user. |
country |
Optional** | String | The ISO 3166-1 alpha-2 country code for the user’s country of residence. |
my_affiliates_token |
Optional | String | My Affiliates Click Token. This value is omitted if no such token has been assigned to the user. |
cash_balance |
Required | Money | Cash balance of the user. |
bonus_balance |
Required | Money | Bonus balance of the user. |
mobile_phone |
Required* | String | The number of the user’s mobile phone. Absent for restricted_activity_subscriber . |
email |
Required* | String | User’s email. Absent for restricted_activity_subscriber . |
firstname |
Required* | String | User’s first name. Absent for restricted_activity_subscriber . |
lastname |
Required* | String | User’s last name. Absent for restricted_activity_subscriber . |
nickname |
Required* | String | User’s nickname. Absent for restricted_activity_subscriber . |
has_deposited |
Required | Boolean | The boolean is true if the user has made at least one successful deposit. |
_links |
Required | LinkCollection | Collection of links for the user. |
Example of Links
"_links": {
"_self": {
"href": "https://example.com/v3/api/users/H0NT92",
"method": "GET"
},
"games": {
"href": "https://example.com/v3/api/users/H0NT92/games",
"method": "GET"
}
}
Links
The following links are provided.
Link | Required? | Description |
---|---|---|
_self |
Required | Link to obtain information about the user. |
games |
Required | Link to obtain the user’s list of favorite games. |
User Profile
The following user profiles can be returned.
profile |
Description |
---|---|
Unverified |
Default profile for new players. |
LowRoller |
Default profile for new Facebook players. Lower game defaults than Unverified . |
Verified |
Trusted players. Operators choose when to set players to Verified , usually after a deposit. Verified players have more deposit options. |
VIP |
High value players. Operators choose when to set players to VIP , usually after a high number of deposits. VIP players can make larger bets and have more deposit options. |
Test |
For internal tests, not used by real players. |
Get User Favorite Games
This endpoint can be used to retrieve the list of favorite games for a given user.
GET ~/v3/api/users/{user_id}/games
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {privileged_token}" \
"http://example.com/v3/api/users/{user_id}/games"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}/games",
"method": "GET",
"headers": {
"authorization" : "bearer {privileged_token}"
}
});
HTTP Request
GET ~/v3/api/users/{user_id}/games
HTTP Method | GET |
Path | ~/v3/api/users/{user_id}/games |
Required Headers | Content-Type , Authorization |
Grant Type | brand_credentials or restricted_activity_subscriber |
Response
{
"favorite_games":
[
{
"provider": "saucify",
"name": "Midnight Racer",
"category": "videoslots"
},
{
"provider": "saucify",
"name": "7 Chakras",
"category": "videoslots"
}
]
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
favorite_games |
Required | Array of Favorite Game | An array of the user’s favorite game, sorted by decreasing order of importance. The array may be empty. |
Favorite Game
Property | Required? | Type | Description |
---|---|---|---|
provider |
Required | String | The value is saucify , genii , go , apollo , rival , betsoft , nucleus , ezugi , crucible , ebet , arrowsedge , originalspirit , freshdeck , evolution , pragmaticplay , betconstruct , bitville or pariplay . Name of the game provider. |
name |
Required | String | Display name of the game. Non localized. |
category |
Required | String | One of classicslots , videoslots ,videopokers , tablegames or other . |
Get New Registrations
This endpoint can be used to access the list of new users’ registrations for a given day.
GET ~/v3/api/registration?date=2018-12-25
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {privileged_token}" \
"http://example.com/v3/api/registration?2018-12-25"
$.ajax({
"url": "http://example.com/v3/api/registration?2018-12-25",
"method": "GET",
"headers": {
"authorization" : "bearer {privileged_token}"
}
});
HTTP Request
GET ~/v3/api/registrations
HTTP Method | GET |
Path | ~/v3/api/registrations |
Required Headers | Content-Type , Authorization |
Grant Type | brand_credentials or restricted_activity_subscriber |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
date |
Required | String | UTC Date in yyyy-mm-dd format. |
HTTP Response
The API only return the new registrations
for the requested date
.
Property | Required? | Type | Description |
---|---|---|---|
registrations |
Required | Array of Registration | Returns an array of user’s registrations. |
Response (with a single registration):
{
"registrations":
[
{
"date": "2017-12-25T08:58:05Z",
"user_id": "H0NT92",
"locale": "en-US",
"country": "US",
"my_affiliates_token": "track-me-not",
"_links": {
"user": {
"href": "https://example.com/v3/api/users/H0NT92",
"method":"GET"
},
"user_games": {
"href": "https://example.com/v3/api/users/H0NT92/games",
"method":"GET"
}
}
}
]
}
Registration
The Registration
object returned in the GET ~/v3/api/summaries
endpoint is a digest of one user’s activity over the course of a day.
Property | Required? | Type | Description |
---|---|---|---|
date |
Required | String | Registration date. The date uses ISO 8601 format and uses the UTC time zone. |
user_id |
Required | String | System identifier for the user. |
locale |
Required | String | The preferred locale of the user. |
country |
Optional | String | The ISO 3166-1 alpha-2 country code for the user’s country of residence. |
my_affiliates_token |
Optional | String | My Affiliates Click Token. This value is omitted if no such token has been assigned to the registration. |
_links |
Required | LinkCollection | A link collection giving access to information about the user and its favorite games. |
Links
Example of Links:
"_links": {
"user": {
"href": "https://example.com/v3/api/users/H0NT92",
"method":"GET"
},
"user_games": {
"href":"https://example.com/v3/api/users/H0NT92/games",
"method":"GET"
}
}
For each summary the following API links are provided.
Link | Required? | Description |
---|---|---|
user |
Required | Link to obtain information about the user. |
user_games |
Required | Link to obtain the user’s list of favorite games. |
Get Tracking Debug Info
This endpoint can be used to check the info attached to the tracking_id
returned by the menu authentication endpoints.
It is only enabled on development and test environments to facilitate testing of the affiliate tracking features.
GET ~/v3/api/tracking/{tracking_id}
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {privileged_token}" \
"http://example.com/v3/api/tracking/{tracking_id}"
$.ajax({
"url": "http://example.com/v3/api/tracking/{tracking_id}",
"method": "GET",
"headers": {
"authorization" : "bearer {privileged_token}"
}
});
HTTP Request
GET ~/v3/api/tracking/{tracking_id}
HTTP Method | GET |
Path | ~/v3/api/tracking/{tracking_id} |
Required Headers | Content-Type , Authorization |
Grant Type | brand_credentials or tracking |
HTTP Response
Response
{
"brand": "SomeBrand",
"locale": "en-US",
"tracking_version": 3,
"tracking_event_type": "MyAffliates",
"tracking_id": "c82f55e6-3b94-454a-ba1c-7ad59f24afc8",
"ip": "81.110.98.39",
"created_date": "2022-02-15T12:49:45.603Z",
"origin_url": "https://www.example.com/SomeBrand?TrackingToken=TrackMeNot",
"tracking_token": "TrackMeNot",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36"
}
The API only returns a tracking_not_found
error if the tracking data cannot be found. Otherwise, the data is sent back as a tracking object.
The returned data was captured when the tracking was created and includes the corresponding tracking_id
returned.
Property | Required? | Type | Description |
---|---|---|---|
brand_id |
Mandatory | String | Brand identifier. |
locale |
Mandatory | String | Locale of the player as requested by Kore API. |
tracking_event_type |
Mandatory | String (enum) | Click or Download for First Party affiliate tracking, MyAffliates for MyAffiliates, or External otherwise. |
tracking_version |
Mandatory | Number (int) | Typically version 3 for MyAffiliates or External tracking. 0 or 1 for the First Party affiliate system. |
tracking_id |
Mandatory | String GUID | The same tracking_id as provided in the request. |
ip |
Optional | String | IP v4 address of the player as captured. |
created_date |
Mandatory | String | ISO 8601 date with mille-second precision in UTC time zone. |
origin_url |
Optional | String | The URL of the menu as captured. |
referrer_url |
Optional | String | The referrer URL (document.referrer ) as captured. |
campaign_key |
Optional | String | Campaign Key for the First Party affiliate system (version 0). |
cid |
Optional | String | Campaign ID for the First Party affiliate system (version 1). |
mid |
Optional | String | Media Key for the First Party affiliate system (version 1). |
aid |
Optional | String | AID for the First Party affiliate system (version 2). Not used. |
c_name |
Optional | String | CName for the First Party affiliate system (version 2). Not used. |
r_name |
Optional | String | RName for the First Party affiliate system (version 2). Not used. |
tracking_token |
Optional | String | Tracking Token used by MyAffiliates. (version 3). |
user_agent |
Optional | String | The user agent of the player’s browser. |
Signons
Get Signon Information
This endpoint can be used to retrieve information that applies to a given signon. A signon is unique for a given brand group. The same signon can be used for multiple users in the same brand group.
GET ~/v3/api/signons/{signon_id}
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer {signon_token}" \
"http://example.com/v3/api/users/{user_id}"
$.ajax({
"url": "http://example.com/v3/api/users/{user_id}",
"method": "GET",
"headers": {
"authorization" : "bearer {signon_token}"
}
});
HTTP Request
GET ~/v3/api/signons/{signon_id}
HTTP Method | GET |
Path | ~/v3/api/signons/{signon_id} |
Required Headers | Content-Type , Authorization |
Grant Type | offline_signon |
Response:
{
"email": "bob@example.com",
"signon_id": "HDoXY_ad9hY49pvy0v7QlQ",
"loyalty": {
"next_tier": "GenesysNewbie",
"next_tier_points": 100,
"next_tier_name": "Newbie",
"tier_level": 1,
"next_tier_level": 2,
"tier_points": 0,
"tier": "GenesysNewbie",
"balance": 0,
"tier_name": "Newbie"
}
}
HTTP Response
Property | Required? | Type | Description |
---|---|---|---|
email |
Required | String | The email address of the SignOn. |
signon_id |
Required | String | The identifier of the Signon (sane as in the URL) |
loyalty |
Required | Loyalty | A Loyalty object with extended properties. |
ZAR Migration
Get Migration Status
GET ~/v3/api/migrations/{migration-id}
curl -X GET -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {brand-token}" \
"http://example.com/v3/api/migrations/{migration-id}"
$.ajax({
"url": "http://example.com/v3/api/migrations/{migration-id}",
"method": "GET",
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com/",
"Authorization": "Bearer {brand-token}",
"Content-Type": "application/json"
}
});
Response:
{
"migration": {
"status": "Available"
}
}
This endpoint verifies whether a player can proceed with the ZAR migration.
HTTP Request
GET ~/v3/api/migrations/{migration-id}
HTTP Method | GET |
Path | ~/v3/api/migrations/{migration-id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
migration-id |
Required | String | The migration ID returned by the migration outcome during login. |
Response Properties
Property | Required? | Type | Description |
---|---|---|---|
migration |
Required | Object | Contains migration information |
migration.status |
Required | String | One of: Available , InProgress , Migrated , or NotAvailable |
Here are the definitions for the statuses:
Available
: The player can proceed to the migration screen.InProgress
: The migration is in progress. The player must have attempted to perform the migration but it may have failed. The migration screen can be shown again.Migrated
: The migration is complete. The player has already completed the migration.NotAvailable
: The player cannot migrate. This case occurs when players have previously created an account using the registration endpoint.
Another possible outcome is migration_not_found
error, in case the player account is tagged as migrated but the information has not yet be imported. Under normal circumstances, this is unlikely to happen.
Errors
Error Code | Description |
---|---|
invalid_request |
This may occur if the migration ID is malformed or required headers are missing. |
invalid_credentials |
Invalid authorization credentials. This can be returned if the migration ID is not signed with the correct key or malformed. |
migration_expired |
Migration ID from source brand is too old. The player must attempt to log in again to obtain a new migration ID. |
migration_not_found |
Migration information not found in Migration DB. |
Perform Migration
POST ~/v3/api/migrations/{migration-id}
curl -X POST -H "Content-Type: application/json" \
-H "X-Kore-ReturnUrl: http://www.example.com/" \
-H "Authorization: Bearer {brand-token}" \
-d '{
"player_info": {
"identification": {
"country": "ZA",
"type": "Id",
"number": "9007141234084"
}
},
"play_mode": "Real",
"device_id": "W4TifY3XvBP2ZftnrKZo",
"password": "DontTellAnyone"
}' \
"http://example.com/v3/api/migrations/{migration-id}"
var payload = {
"player_info": {
"identification": {
"country": "ZA",
"type": "Id",
"number": "9007141234084"
}
},
"play_mode": "Real",
"device_id": "W4TifY3XvBP2ZftnrKZo",
"password": "DontTellAnyone"
};
$.ajax({
"url": "http://example.com/v3/api/migrations/{migration-id}",
"method": "POST",
"headers": {
"X-Kore-ReturnUrl": "http://www.example.com/",
"Authorization": "Bearer {brand-token}",
"Content-Type": "application/json"
},
"data": JSON.stringify(payload)
});
Response:
{
"migration": {
"status": "Migrated"
},
"auth": {
"grant_type": "player_credentials",
"locale": "en-US",
"tokens": [
{
"type": "Bearer",
"expiration": "2020-07-12T08:08:41Z",
"value": "CfDJ8KBChYue…"
}
],
"_links": {
"user": {
"href": "http://www.example.com/v3/api/users/{userid}",
"method": "GET"
},
"logout": {
"href": "http://www.example.com/v3/api/auth/player_credentials",
"method": "POST"
}
}
}
}
This endpoint handles the migration process by collecting the SA ID and new password for the account.
HTTP Request
POST ~/v3/api/migrations/{migration-id}
HTTP Method | POST |
Path | ~/v3/api/migrations/{migration-id} |
Required Headers | X-Kore-ReturnUrl , Content-Type , Authorization |
Grant Type | brand_public_credentials |
Query Parameters
Property | Required? | Type | Description |
---|---|---|---|
migration-id |
Required | String | The migration ID returned by the migration outcome during login. |
Request Parameters
Property | Required? | Type | Description |
---|---|---|---|
player_info |
Required | PlayerInfo | A restricted player_info object containing only the identification property. |
play_mode |
Required | Enum String | Either Real or Practice . Typically, Real is used. |
password |
Required | String | New password following registration requirements (min: 8 characters, max: 20 characters) |
device_id |
Optional | String | This value corresponds to the visitorId returned by the FingerprintJS Pro API. Max 20 characters. |
Response Properties
Property | Required? | Type | Description |
---|---|---|---|
migration |
Required | Object | Contains migration status |
migration.status |
Required | String | Must be Migrated on success |
auth |
Required | PlayerTokenResponse | A player authentication response |
Errors
Error Code | Description |
---|---|
invalid_request |
If the JSON body is malformed or any required headers are missing. |
migration_completed |
The migration status is already set to Migrated; you cannot perform the migration more than once. |
migration_not_available |
The player has already created an account; so the migration cannot be performed. |
migration_failed |
Internal Kore error during migration. This errors occurred after the player account was created and during the migration process. |
migration_not_found |
Migration information not found in Migration DB. This may occur briefly after the player account was tagged. |
Version History
Version 3.35
- Removed
invalid_sms_code_length
error code. It can’t be triggered. You should get ainvalid_request
error instead. If that layer of validation fails, you’ll get aserver_error
500 which will be treated as a validation bug to fix. - Added all tournament error codes to the claim bonus endpoint.
- Added new migration outcome to all login flows.
- Added new ZAR migration endpoints.
- Added new migration errors.
- Added new error code
bonus_claim_in_progress
to bonus claiming endpoint for handling concurrent bonus claims. - Added missing recovery error codes introduced in version 3.30.
Version 3.34
- Added support for
state_code
parameter to the player registration endpoint for South Africa.
Version 3.33
- Improves games section documentation.
Version 3.32
- Added
download_app_store
link to theGET ~/v3/api/users
response, to provide download links for the iOS App on the app store. - Added new error codes
invalid_sms_code_length
,verification_code_expired
andqueued_awaiting_sms_send
to mobile phone verification for better error handling.
Version 3.31.4826
- Raised limit of filter bonus codes endpoint from
12
to50
.
Version 3.31
- Added support for
pariplay
games. Documented support forbetconstruct
andpragmaticplay
which must have occurred in a previous release.
Version 3.30
- Added new
MissingPlayerInfo
status to the registration endpoint to enforce address capture at registration. - Added new
extra_player_info
grant type tied toMissingPlayerInfo
. It is used for a address capture outcome for the Player Token Response. - Added new amend user endpoint which must be used to amend user info such as address capture
extra_player_info
grant type. - Added a new endpoint to create the password reset flow journey.
- Added a new endpoint send the recovery code received by SMS or email to the Kore API.
Version 3.29
- Removed support for
ip
parameter in endpoints to obtain a public brand token, a player token, mutate a player token, activate account or create a user account. - Removed support for
iovation
in Tracking Context. If the parameter is passed it will be ignored. - Both
iovation
andip
had been previously documented as deprecated, and scheduled for removal. - Added partial support for
en-ZA
locale. - Updated
nickname
as an optional parameter withinplayer_info
in the player registration endpoint. It will be auto generated from the Kore backend. - Added new optional parameter
fund_source
withinplayer_info
in the player registration endpoint. This is a string enum with the following possible valuesSalary
,SelfEmployed
,Inheritance
,Savings
,InvestmentIncome
, andPension
Version 3.28
- Added new
password_change_too_soon
error to change password endpoint. - Added new
launch_token
link to game links which points to new obtain launch token endpoint which is only implemented forbetconstruct
games. - Added new
launch_game
Grant Type. - Added new
launch
link to game links which points to new custom game launch endpoint which is only implemented forbetconstruct
games. - Updated
device_category
to include a newauto
andresponsive
value in the game object. - The
pragmaticplay
games now use the newauto
value. This is how these games have always been implemented. The implementation was never responsive. - The
betconstruct
games now appear in duplicate. One withmobile
and one withdesktop
as adevice_category
. Beware these games will have the same slug since they are backed by the same underlying Game ID in the database. It is up to the Kore API consumer to choose the appropriate launch link based on the viewport size. - Added new BalanceUpdate signal R notification to support
betconstruct
integration in an Iframe. - Internal refactoring of SignalR support. There should be no visible changes to Kore API consumers.
- Modified
identification
withinplayer_info
to supportPassport
documents as well.
Version 3.27
- Added new
HardSmsVerificationRequired
status to the registration endpoint to enforce SMS verification at registration. - Added new
player_verification_credentials
grant type tied toHardSmsVerificationRequired
. It is used for a new SMS verification outcome for the Player Token Response. - Added support for
player_verification_credentials
to existing SMS verification and resend SMS endpoints. - Added new response to player login endpoint to enforce password change. A token using the new
player_change_password
grant type is returned. - Added new change password endpoint which must be used to change password using the
player_change_password
grant type. - Added support for new
apollo
game provider. - Added a new optional parameter
identification
withinplayer_info
in the player registration endpoint for capturing the South Africa ID number. - Added (partial) support for
betconstruct
third party provider. - Added new
sportsbook
game category.
Version 3.26
- Added new
bitville
game provider and newcrashgames
category - Added support for Campaign Lists.
- Introduced new
campaign_list_check
mode toPOST ~/v3/api/users/emailcheck
endpoint endpoint. - Introduced new
campaign
parameter toPOST ~/v3/api/bonuses/claim
endpoint endpoint. - Added new
bonus_campaign_ineligible
error.
Version 3.25
- Added new errors
firstname_profanity
,lastname_profanity
andnickname_profanity
to the player registration endpoint - Removed support for 6 deprecated brands. Trying to get tokens for these brands would return an
invalid_request
error.
Version 3.24.4436
- Added
duplicate_request
error and enabled it on thePOST ~/v3/api/users
endpoint endpoint.
Version 3.24
Added missing documentation about
has_historical_chargeback
flag returned from summary endpoint.Added new
player_day
endpoint to get statistics about deposits and bets in USD since a specified date.Documentation incorrectly stated that
win_amount
on tournament leaderboards was optional. This has been corrected. The value is set to0
if there aren’t any wins yet.Added a new optional
welcome
property to the player registration endpoint and the brand group activation endpoint. It is used to record additional information in the database that link new player registrations to welcome page campaigns.
Version 3.23
This version of Kore introduces support for mobile phone verifications. They can now be implemented directly in the menu.
- Added new errors specific to verifications
- Modified VerificationStatus returned by
~/v2/api/users/{user_id}
endpoint to include newInvalidPhone
andAwaitingCode
statuses. - Added a new endpoint to enter verification codes received by SMS.
- Added a new endpoint to request sending SMS verification codes.
Version 3.22
This version of Kore adds native support for the player referrals API.
- Added new errors specific to referrals.
- Added endpoint to get the player’s referral info.
- Added endpoint to get referral info from a referral code.
- Added endpoint to claim referral bonuses.
Version 3.21
- Added GET ~/v3/notifications WebSocket endpoint to be used with SignalR. It is currently used to received operator initiated chat and logout notifications.
- Renamed
operator_initiated_chats
intochats
in the GET ~/v3/api/chats response. This is a breaking change but the endpoint is not used in production. Modified GET ~/v3/api/chats to return the active chats initiated by the players. Added an
is_operator_initiated
flag.Version 3.20
Added GET ~/v3/api/chats to return operator initiated chats. This endpoint can be polled every 10 seconds.
Version 3.19
- Added
free_games_set
property to the Game object returned by theGET ~/v3/api/games
andGET ~/v3/api/games/{games_id}
endpoints.
Version 3.18.4096
- Added
claimed_offers
toPOST ~/v3/api/users/emailcheck
endpoint response. - Added new
account_temporarily_locked
error. It can be returned by the player sign-in endpoint and the activation endpoint. At present, a player can trigger this error if they attempt to sign in with the incorrect password consecutively 3 times within an hour. These limits are subject to change in the future. Prior versions of the API would have returnedinvalid_password
instead, which can be misleading when the players did enter the correct passwords.
Version 3.18
- Documentation incorrectly stated that
captcha
existed onPOST ~/v3/api/auth/player_credentials/activate
endpoint. - Modified
POST ~/v3/api/users/emailcheck
endpoint- Added support for CAPTCHA.
- Added support for fast track registration.
- Added details about cash offers in response.
- This endpoint may now return a
captcha_required
error.
- Added support for fast track registration to
POST ~/v3/api/users
endpoint. - Added
claimed_offers
toGET ~/v3/api/users/{user_id}
response. - Added new
invalid_fast_track_registration_code
error code.
Version 3.17
- Added support for the activation workflow in the API instead of relying on
follow
action links in responses. - Activation occurs when players attempt to register or sign in with the same email address used by another from another brand which belongs to the same brand group.
- Modified
POST ~/v3/api/users
endpoint response to provide support for activation during registration. - Modified
POST ~/v3/api/auth/player_credentials/token
endpoint response to provide support for activation during login. - Added a new
POST ~/v3/api/users/emailcheck
endpoint to detect whether an email address is used during registration, and optionally trigger an activation. - All endpoints above may return the new
Activation
type in the responses. - Added a new
POST ~/v3/api/auth/player_credentials/activate
endpoint to activate an existing player’s account on a new brand. - Added
activation_failed
andinvalid_activation_code
errors. - Added
GET ~/v3/api/competitions
endpoint to get the list of competitions. - Added
GET ~/v3/api/competitions/{ids}/leaderboard
encpoint to retrieve the leaderboard of competitions. - Added new
competition_not_found
,activation_failed
andinvalid_activation_code
error codes. - Added new
leaderboad
grant type for privileged access to entire leaderboards.
Version 3.16
- Removed support for Desktop Client and OpenGL games.
- Added
download_apk
link to theGET ~/v3/api/users
response, to provide download links for the Android App. - Added documentation section about the APK integration. The menu needs to communicate with a
window.app_v1
objects whenever players sign in or sign out. - Added
X-Error-Code
header to Error responses. - Changed the order of
jackpots
array in theGET ~/v3/api/progressives/games
response. The jackpots are now sorted in decreasing order based on thecurrent
value. - Removed support for a disused brand (MW).
Version 3.15
The API allows phone numbers of up to 17 digits, instead of 15 digits, as stated by the E.164 specification. We follow the guidance of libphonenumber which states that numbers can be up to 17 digits.
The API now performs last touch attribution for the affiliate tracking feature. If the Tracking Context provided to the API contains a
tracking_id
and either areferrer
or aurl
parameter with tracking parameters, then the API shall generate a newtracking_id
associated to the newly provided tracking data. Previous versions of the API would have returned the sametracking_id
provided by the request (as long as it was valid), or in other words, perform a first touch attribution.In order to prevent the last touch attribution logic from counting internal menu links as external SEO sources, the Kore API now automatically discards
tracking.referrer
values whose root domains match the root domain provided by theX-Kore-ReturnUrl
header. See tracking context for details.The API now automatically truncates the
referrer
,url
anduser_agent
parameters from the Tracking Context if they are over 1,000 characters. No errors will be reported back from the API.Removed support for a disused brand (MW).
Version 3.14.3733
- Added a
has_deposited
flag to theGET ~/v3/api/users/{user-id}
response.
Version 3.14
Added
GET ~/v3/api/progressive/games
endpoint to get information about Progressive Games and their Jackpot Values.Made validation of the Tracking Context stricter.
Added support for non fatal errors and non fatal validation for the
device_id
and thetracking
context object on the authentication and user registration endpoints.The API also automatically extracts and persist the
AffiliaTag
query parameter provided in theurl
property of thetracking
context object. It means it is no longer necessary to provide theaffiliate_tag
parameter in the player registration endpoint.Added new
tracking
grant type and a tracking debug endpoint which enables troubleshooting affiliate tracking on test environments.Added
server_only_credentials
error which is only used for thetracking
grant type.Version 3.13
Added
affiliate_tag
parameter added to the create account endpoint.Added new Tag category
Affiliate
to the get user tags endpoint.
Version 3.12
Added integration with FingerprintJS Pro API.
You can now provide an optional
device_id
when players sign in or create accounts.Added new
ezugi
games and updated the way the games list is managed.
Version 3.11
Tweaked tracking in order to capture referrer URLs values. The changes should be backward compatible, and the
TrackingContext
object in Kore 3.11 shall be used in the same way as before.API consumers should check that the
referrer
property of theTrackingContext
is set correctly. This information can be retrieved viadocument.referrer
in JavaScript.It is now recommended to expire the cookie (or storage medium) used to store the
tracking_id
after 24 hours. The expiration should not be extended when the API returns the sametracking_id
value.The implementation of the tracking has changed a lot internally:
- A
tracking_id
may be returned even if theurl
contains no tracking information. In general, atracking_id
would be be returned if atracking
parameter is provided. - When a MyAffiliates
TrackingToken
is present in theurl
, the API shall return a normaltracking_id
which is a UUID. In versions prior to Kore 3.11, the API used to return atracking_id
which was prefixed byma-
. Such legacytracking_id
s remain valid, but shall no longer be issued by the API. In any case, consumers of the API should not rely on this kind of implementation details, and treat thetracking_id
as a black box. We make no guarantees about the format oftracking_id
being a UUID in future versions. - The API may choose to expire tracking information. When this occurs, the API shall return a
tracking_id
in the response which is different from the one provided in the request. In versions prior to Kore 3.11, this use case was rare, as it was only encountered if the providedtracking_id
was invalid. Consumers of the API should ensure their code correctly updates thetracking_id
references.
- A
Fixed an issue with
total_amount_withdrawn
property in theGET ~/v3/api/users/summaries
endpoint, and improved documentation. This value may be negative in some circumstances.
Version 3.10
- Added
POST ~/v3/api/bonuses/filter
to filter out bonus codes that cannot be claimed by a player. - Improved session checking performance on
~/v3/users
and~/play
endpoints.
Version 3.9
- Added new
evolution
games and updated the way the games list is managed. - Added
X-Kore-ErrorCode
header to Error responses.
Version 3.8
- Update to
Rival
third party games, all games must now launch in an iframeGET ~/v3/api/games
. - Added support for
pragmaticplay
games. These games are only enabled for some brands and some currencies.
Version 3.7
- Updated
GET ~/v3/api/currencies
to provide more information about currencies. The demo site is now using the provided information to format monetary amounts. - Added support for
INR
currency. - Updated the API to support a new Game Provider named
evolution
. - Some games returned by the
GET ~/v3/api/games
endpoint do not offer launch actions URLs for some currencies.
Version 3.6
- Removed flash games from
GET ~/v3/api/games
endpoint. - Removed support for
v2
endpoints. - Removed optional download installer links from
GET ~/v3/api/users
endpoint. - Removed
description
andrules
properties from theGame
objects. - Fixed maximum password which is now set to
20
characters inPOST ~/v3/api/users
endpoint. - Added a new
unsupported_play_mode
error which may be returned by login, switch playmode and registration endpoints for some brands. - Added a rate limit to the
POST ~/v3/api/bonuses/claim
endpoint. - Added
tags
andcustom
links toGET ~/v3/api/users/{user-id}
endpoint. - Added new
GET ~/v3/api/users/{user-id}/tags?categories={cat1},{cat2}
endpoint to retrieve tags associated to a player. - Added new
GET ~/v3/api/users/{user-id}/custom
endpoint to retrieve custom user information. The operator controls the information returned via a dedicated stored procedure in the database.
Version 3.5
- Added support for a new
FreshDeck
game provider. - Added constraints to
GET ~/v3/api/users
for ‘FreshDeck’ games.
Version 3.4
- Added new
GET ~/v3/api/currencies
to get the list of available currencies. - Added new
POST ~/v3/api/bonuses/claim
endpoint to a programmatically claim bonuses. - Added
bonus_invalid_invite
,bonus_withdrawal_made
andnickname_already_registered
error codes. - Added
register
link toGET ~/v3/api/users
endpoint. - Added new
POST ~/v3/api/users
endpoint to create new player account. - Added an optional
properties
array to error responses.
Version 3.2
- Added optional
device_category
parameter to theGame Common Properties
forArrowsEdge
game provider.
Version 3.1
Added experimental support for offline_signon
grant type.
Version 3
This is a major update of the API which breaks backward compatibility:
- As established in the version policy, all URLs pointing to Version 3 endpoints are prefixed by
v3
. - All
v2
endpoints are still available for some time, and shall remain backward compatible with the previous versions of the API. Legacy v2 documentation is still available here.
Most changes in this release affect the Authentication endpoints:
- The authentication endpoints now include the
grant_type
in the path, rather than being passed as a POST parameter. - The responses from all authentication endpoints now feature a
tokens
array. - The
player_credentials
grant type no longer uses refresh tokens. The issued bearer tokens are valid for 24 hours. - The
activity_subscriber
grant type has been dropped since it is not in use. - Added a new endpoint, to check whether CAPTCHAs are mandatory for players to log in.
- Added a
captcha
property, which is generally optional, in the player authentication endpoint. - Added
captcha_required
andcaptcha_invalid
errors.
Version 2.10.2506
- Added VerificationStatus object to the
~/v2/api/users/{user_id}
endpoint.
Version 2.10
- Added support for launching first party games inside iframes.
Version 2.9
- Added support for a new
crucible
game provider.
Version 2.8
- Added support for a new
ezugi
game provider. - Added
user_token
property to the~/v2/api/users/{user_id}
endpoint
Version 2.7.2272
Added Elite Blackjacks support for Mobile/HTML.
Modified the names and slugs for the existing Mobile/HTML Blackjack games.
Previous Name | New Name |
---|---|
Atlantic City Blackjack |
3 Seat Atlantic City Blackjack |
European Blackjack |
3 Seat European Blackjack |
Single Deck Blackjack |
1 Seat Single Deck Blackjack |
Vegas Strip Blackjack |
3 Seat Vegas Strip Blackjack |
Previous Slug | New Slug |
---|---|
sp-atlantic-city-blackjack |
mobile-sp-atlantic-city-blackjack |
sp-european-blackjack |
mobile-sp-european-blackjack |
sp-single-deck-blackjack |
mobile-sp-single-deck-blackjack |
sp-vegas-strip-blackjack |
mobile-sp-vegas-strip-blackjack |
- The configuration (both names and slugs) for the legacy Flash Blackjacks remains unchanged.
Version 2.7.2204
- Added 10 new
nucleus
games.
Version 2.7.2192
- Added a
total_amount_withdrawn
property to the~/v2/api/users/summaries
endpoint. - Fixed numerous bugs in the
~/v2/api/users/summaries
endpoint:game_rounds_count
was under-estimated and incorrect for most players.total_amount_wagered
,total_amount_paid
,total_amount_deposit
,total_amount_chargebacks
, andtotal_progressive_contributions
were grossly overestimated for some players.
- In addition the
failed_deposits_count
has been retired from~/v2/api/users/summaries
. The value is now set to0
. The property is marked for removal in the next major revision (v3) of the API.
Version 2.7.2173
- Added a
has_deposited
property to the~/v2/api/users/{user_id}
endpoint used for user activity tracking.
Version 2.7.2165
- Implemented necessary changes to continue supporting crypto currencies in
nucleus
games.
Version 2.7.2162
Fixed bug in
~/v2/api/users/{user_id}/stats
endpoint which was unable to deal with disabled games. Some mandatory properties are omitted for disabled games. Please read the notice for more information.Removed 8 games from the
betsoft
provider.Added 8 games to the
genii
provider.
Version 2.7
The returned
platform
forbetsoft
andnucleus
is now set toauto
instead ofhtml
. See notice.Added new user email status endpoint
~/v2/api/users/{user_id}/email_status
.Added new user statistics endpoint
~/v2/api/users/{user_id}/stats
.Added
statistics
andemail_status
API links to~/v2/api/users/{user_id}
endpoint response.Added an optional
medal
property of typeMedal
to theGame
objects returned by both~/v2/api/games
and~/v2/api/games/{id}
endpoints.Added
birth_date
,profile
andregistration_date
properties to the~/v2/api/users/{user_id}
endpoint response.Changed the internal URLs used for the
play
andplay_tournament
action links. If the session had already expired, the API now automatically redirects to theX-Kore-ReturnUrl
URL instead of launching the game.
Version 2.6.1871
Added
duration
property to the detailedTournament
object returned by the~/v2/api/tournaments/{id}
response.Added support for 2 new
go
brands.Added support for
ZAR
currency.
Version 2.6.1864
- Added support for new
nucleus
provider.
Version 2.6.1843
- Added
rate_limit_exceeded
error.
Version 2.6.1831
Added support for Keno games.
Fixed bugs where the API returned invalid values for non existing property values.
- The
firstname
andlastname
properties of~/v2/api/users/{user_id}
response are now made optional. The operator may choose to no longer require these properties to be populated during registration. This can only apply for new brands introduced on or after version2.6.1819
. - Made the
country
property optional and potentially omitted in privileged~/v2/api/users/{user_id}
and~/v2/api/registrations
responses. Previously when the country was unknown the API erroneously returned theZZ
placeholder value. Since version2.6.1819
, the operator may also choose to lift up requirement to populate thecountry
field for brands introduced on or after version2.6.1819
.
- The
Version 2.6.1819
- Added support for new brand and new
go
provider.
Version 2.6
Changes to User Activity endpoints:
- Added
my_affiliates_token
property to~/v2/api/registrations
response. - Changed
~/v2/api/users/summaries
response:- split
total_amount_wagered
andtotal_amount_paid
intobonus
andcash
components. - added
total_amount_chargebacks
andtotal_progressive_contributions
.
- split
- Added
Added support for MyAffiliates tracking to TrackingContext. No change in the API or its consumers is required for this feature to be supported.
Fixed issues when using API server-side:
- An additional
ip
parameter needs to be provided to the~/v2/api/token
endpoint (see here, here and here). - An additional
user_agent
property needs to be provided to the TrackingContext.
- An additional
Version 2.5
Added new
blocked_gamstop
error.Added support for Tournament Rebuys:
- Added new endpoint to purchase rebuys:
~/v2/api/tournaments/{id}/rebuys
. - Added
rebuys
property to theTournament
object. - Added new errors:
tournament_not_started
,tournament_rebuys_exceeded
andtournament_balance_excessive
.
- Added new endpoint to purchase rebuys:
Version 2.4
Removed empty
_actions: {}
from~/v2/api/games
responses withbrand_public_credentials
grant types.Added support for crypto currencies. See
Currency
.Added
activity_subscriber
andrestricted_activity_subscriber
grant types to~/v2/api/auth/token
endpoint.Added new privileged endpoints:
Version 2.3
- Deprecated version 1 of the API. All
/v1
endpoints are no longer available. - Added new
geoblocked
error. - Added support for new
BetSoft
games.
Version 2.2.1429
Added support for 17 new
Rival
games.Fixed bug in
slug
property for Cleopatra’s Coins game. It was incorrectly set asrival-cleopatra's-coins
(with apostrophe) instead ofrival-cleopatras-coins
(without apostrophe).
Version 2.2.1393
- Fixed bug which made
win32_installer
andmacx_installer
actions available for brands that did not support them.
Version 2.2
Added support for Loyalty in
~/v2/api/users/{userid}
response.Added support for Rival games:
- Added an additional
provider
property to programmatically distinguish games provided by eithersaucify
,genii
orrival
. - Made
description
,rules
andattributes
fields mandatory only forsaucify
andgenii
games. - The
play
action is only provided for real money mode. - Rival games support the
fr-FR
locale.
- Added an additional
Version 2.1
- Added support for Tournaments (v2 only)
- Get tournament news.
- Get the list of tournaments.
- Get details about a tournament.
- Join or leave a tournament.
- Added new specific tournament errors.
- Added new
XTC
currency to represent tournament credits.
Version 2.0.1072
Added cash_balance
and bonus_balance
properties to the ~/v2/api/users/{userid}
endpoint response. This change is limited the v2 version of the API.
Version 2.0
Version 2.0 is a non backward compatible version. As explained in the version policy you need to prefix the API with v2
to use the breaking changes. You may continue to use v1
in older code.
This documentation is only valid for the v2
version of the API, and usage of v1
is strongly discouraged.
Breaking Changes
These changes are only available to v2
API endpoints.
Replaced
expires_in
by anexpiration
property, in all responses from the~/v2/api/auth/token
endpoint which contain anaccess_token
property.Replaced
numerator
anddenominator
properties withamount
andexponent
inMoney
type used in~/v2/api/users/{userid}
endpoint.Simplified
TrackingContext
structure and added support for server to server pixel tracking. Thecid
,mid
andrt
parameters no longer need to be parsed from the query parameters of the URL. The API now accepts a singleurl
parameter instead.Performance improvement. Removed the
description
andrules
properties from the~/v2/api/games
response. These properties can now be obtained by using the new~/v2/api/games/{game_id}
endpoint. Also removed query parameter filters from~/v2/api/games
endpoint.
Backward Compatible Changes
These are changes added to both v1
and v2
endpoints.
Added support for 2 additional brands.
Added
slug
property to~/v2/api/games
response.Added
account_locked
error.Fixed bug which made non-localized Flash game appear in the
~/api/games
response for the Desktop Client. These games cannot be launched in the Desktop Client.
Version 1.1
- Added support for integrating with the Aris Desktop Client.
- Added
invalid_desktop_client
error andX-Kore-DesktopClient
headers. - Added
opengl
type to~/v1/api/games
endpoint.
- Added
- Performance improvements.
- Added
Access-Control-Max-Age
to all CORS responses. It is set to 1 year. - Added
Cache-Control
headers too all API responses. Made~/v1/api/games
responses cacheable.
- Added
- Change HTTP status for
account_review
error from401
to400
. - Player sign out
- Added endpoint to sign out players.
- Added
logout
link to~/v1/api/auth
response.
- Made sure the
~/v1/api/games
endpoint responds with aexpired_player_session
error if the session has expired.- This makes it possible to find out if games are going to fail with a session expired error before launching them.
Version 1.0.666
Added
iovation
toTrackingContext
.Added support for 1 additional brand, and 1 additional game.
Version 1.0.641
Added support for
de-DE
,it-IT
,es-ES
,el-GR
,da-DK
,sv-SE
andnb-NO
locales. See locales.Added support for 14 additional brands.
Added support for
Realms
HTML game.
Version 1.0.629
- Added an
_actions
property with alanding
URL to thebrand_public_credentials
token response.
Version 1.0.612
- Added support for additional brand and games.
Version 1.0.604
Fixed bug that prevented some users from logging in.
Fixed bug that prevented the API from reporting the correct IP address when the Puffin browser is used.
Version 1.0
Added ability to mutate an existing player token to change the locale to
fr-FR
for brands that support it. The endpoint was modified to accept alocale
parameter. Previously only the theplay_mode
could be changed.Added ability to log in with
fr-FR
locale for brands that support it.Added
locale
to~/v1/api/users/{userid}
response.Added
locale
to~/v1/api/games
response.Fixed issue that meant tokens were becoming invalid before their expiration date, and Kore would issue a
invalid_credentials
error. This invalidation of tokens would occur about once a day prior to the fix.
Version 0.7
Released on 2017-05-18
- Added
help_chat
action links to~/v1/api/users
and~/v1/api/users/{userid}
endpoints.
Version 0.6
Released on 2017-05-16
INTERNAL. Modified games configuration logic.
INTERNAL. Added configuration for production environments.
Added comment in
~/v1/api/games
endpoint about the game order which not guaranteed.
Version 0.5
Released on 2017-05-09
Added Desktop Client Download links to the
~/v1/api/users
endpoint.Added Reset Password link to the
~/v1/api/users
endpoint.Added ability to change the playmode of a
player_credentials
access token.Breaking non backward compatible change. Renamed
playmode
intoplay_mode
for~/v1/api/users/{userid}
. This makes the API more consistent with the~/v1/api/auth/token
endpoint.
Version 0.4
Released on 2017-04-25
Added support for BD brand.
Fixed documentation for the
~/v1/api/games
endpoint. Thecategory
query parameter isvideopokers
notvideopoker
.Added
invalid_request
error whencategory
orplatform
values are incorrect in~/v1/api/games
endpoint.
Version 0.3
Released on 2017-04-12
Added
firstname
,lastname
andnickname
to~/v1/api/users/{userid}
endpoint’s response.Added
playmode
to~/v1/api/users/{userid}
endpoint’s response.Added optional
tracking
object to~/v1/auth/token
endpoint’s request.Added
tracking_id
to~/v1/auth/token
endpoint’s response.Fixed bug which would make the API issue an HTTP 500 response without an error object when the game configuration data is corrupted.
See Tracking Context to learn more about the affiliate tracking support.
Version 0.2
Released on 2017-03-14.
Most changes are about supporting refresh tokens in the API.
Added
refresh_token
grant type to~/v1/api/auth/token
endpoint. See how to refresh a player token.Added
refresh_token
property to responses from~/v1/api/auth/token
endpoint withgrant_type
set toplayer_credentials
.Added
expires_in
property to responses from~/v1/api/auth/token
endpoint which contain anaccess_token
property.Added
expired_token
error. Previously, expired token would return a genericinvalid_credentials
error.Added
expired_player_session
error to deal with the cases where the player session expires on the game server.
Version 0.1.340
Released on 2017-03-06.
Version 0.1.340 is the first public release of Kore.