Skip to main content

BO Player Account Management (PAM)

Player Account Management (PAM) API (1.0.0)

Download OpenAPI specification:Download

API for managing player accounts and authentication

API Documentation

Get OpenAPI specification

Returns the OpenAPI specification in YAML format

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "code": "invalid_request",
  • "message": "Invalid request payload",
  • "details": { }
}

Get WebSocket message schema

Returns the JSON schema for WebSocket messages

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{ }

Player Account

Sign up a new player

Create a new player account with the provided credentials

Request Body schema: application/json
required
email
required
string <email>
password
required
string
username
string

Optional username for the player

currency
string
Default: "EUR"

Base currency for the player account

originIp
string

IP address at signup

seonSessionToken
string

Optional SEON session token for fraud detection

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "password": "string",
  • "username": "string",
  • "currency": "EUR",
  • "originIp": "string",
  • "seonSessionToken": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "string",
  • "tokenType": "Bearer",
  • "expiresIn": 86400,
  • "player": {
    }
}

Sign in a player

Authenticate a player and receive an access token

Authorizations:
bearerAuth
Request Body schema: application/json
required
email
required
string <email>

Player's email address

password
required
string <password>

Player's password

originIp
required
string

IP address at signin

seonSessionToken
string

Optional SEON session token for fraud detection

Responses

Request samples

Content type
application/json
{
  • "email": "player@example.com",
  • "password": "securePassword123",
  • "originIp": "string",
  • "seonSessionToken": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  • "tokenType": "Bearer",
  • "expiresIn": 3600,
  • "player": {
    }
}

Sign in a player with external token

Authenticate a player using an external authentication token (e.g. BankID, Trumo) and receive an access token

Request Body schema: application/json
required
token
required
string

External authentication token (e.g. from BankID, Trumo, etc.)

seonSessionToken
string

Optional SEON session token for fraud detection

Responses

Request samples

Content type
application/json
{
  • "token": "eyJhbGciOiJIUzI1NiIs...",
  • "seonSessionToken": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  • "tokenType": "Bearer",
  • "expiresIn": 3600,
  • "player": {
    }
}

Get current player info

Retrieve detailed information about the currently authenticated player

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "id": "pub_123456789",
  • "username": "player123",
  • "email": "player@example.com",
  • "emailVerified": true,
  • "status": "active",
  • "balances": [
    ],
  • "personalInfo": {
    },
  • "kycStatus": [
    ],
  • "paymentMethods": [
    ]
}

Set primary email

Set or update the primary email address for the currently authenticated player. A verification email with a confirmation link will be sent to the provided email address. The email will only be set as primary after the user clicks the verification link.

Authorizations:
bearerAuth
Request Body schema: application/json
required
email
required
string <email>

The email address to set as primary

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com"
}

Response samples

Content type
application/json
{
  • "message": "Verification email sent successfully",
  • "verificationSent": true,
  • "email": "user@example.com"
}

Verify email address

Verify an email address using the verification token sent to the user's email. This endpoint is called when a user clicks the verification link in their email. No authentication is required as the token itself serves as proof of email ownership.

Authorizations:
bearerAuth
Request Body schema: application/json
required
token
required
string

The verification token from the email link

Responses

Request samples

Content type
application/json
{
  • "token": "abc123def456..."
}

Response samples

Content type
application/json
{
  • "message": "Email verified successfully",
  • "verified": true,
  • "email": "user@example.com",
  • "errorCode": "token_expired"
}

Player Personal Information

Update player personal information

Update personal information for the currently authenticated player

Authorizations:
bearerAuth
Request Body schema: application/json
required
firstName
required
string [ 1 .. 50 ] characters

Player's first name

lastName
required
string [ 1 .. 50 ] characters

Player's last name

country
required
string^[A-Z]{2}$

ISO 3166-1 alpha-2 country code

dateOfBirth
required
string <date>

Player's date of birth (YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "firstName": "John",
  • "lastName": "Doe",
  • "country": "US",
  • "dateOfBirth": "1990-01-15"
}

Response samples

Content type
application/json
{ }

Cashier

Create deposit request

Create a new deposit request for a player.

This endpoint initiates a payment deposit flow through supported payment gateways. Authentication via Bearer token in the Authorization header is optional. If authenticated, the player ID is extracted from the token. If not authenticated, the player ID must be provided in the request body.

The request can include encrypted card data for new payments or reference a previously saved payment account ID for quick deposits.

Redirect URLs (successUrl, failureUrl, pendingUrl, cancelUrl) control where the user is redirected after payment completion based on the result.

Authorizations:
bearerAuthNone
Request Body schema: application/json
required
amount
required
string^\d+(\.\d{1,2})?$

Payment amount as decimal string

currency
required
string^[A-Z]{3}$

Currency code for the payment

paymentAccountId
string

Payment account ID for previously saved deposit

bonusPublicId
string

Optional bonus public ID to apply to the deposit

object (EncryptedCardData)

Encrypted credit card data for secure payment processing

object (EncryptedCardCCV)

Encrypted CVV data for secure payment processing

paymentMethod
required
string (PaymentMethod)
Enum: "visamc" "bankiban" "bankid"

Payment method identifier

paymentGateway
required
string
Enum: "piq" "fpiq" "trumo"

Payment gateway identifier (currently supports PaymentIQ, Fake PaymentIQ, and Trumo)

successUrl
string <uri>

URL to redirect to after successful payment

failureUrl
string <uri>

URL to redirect to after failed payment

pendingUrl
string <uri>

URL to redirect to when payment is pending (overrides PIQ merchant config if provided)

cancelUrl
string <uri>

URL to redirect to when payment is cancelled (overrides PIQ merchant config if provided)

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get deposit status by deposit public ID

Retrieve the current status of a deposit using the deposit public ID

Authorizations:
bearerAuth
path Parameters
depositPublicId
required
string^dep_[a-zA-Z0-9]+$
Example: dep_abc123xyz789

Deposit public ID (e.g., dep_abc123xyz789)

Responses

Response samples

Content type
application/json
{
  • "publicId": "dep_abc123xyz789",
  • "status": "requested",
  • "amount": "100.00",
  • "currency": "EUR",
  • "paymentGateway": "piq",
  • "paymentMethod": "visamc",
  • "createdAt": "2024-01-15T10:30:00Z",
  • "updatedAt": "2024-01-15T10:35:00Z",
  • "providerTransactionId": "2883208724",
  • "providerStatus": "TRANSFERRED"
}

Get deposit form schema

Retrieve the dynamic form schema for deposit based on selected payment method (public endpoint)

Authorizations:
bearerAuth
Request Body schema: application/json
required
paymentMethod
required
string

Payment method code

isSavedAccount
boolean

Whether this is for a saved payment account

Responses

Request samples

Content type
application/json
{
  • "paymentMethod": "visamc",
  • "isSavedAccount": false
}

Response samples

Content type
application/json
{
  • "fields": [
    ],
  • "encryptor": {}
}

Get withdrawal form schema

Retrieve the dynamic form schema for withdrawal based on selected payment method (public endpoint)

Request Body schema: application/json
required
paymentMethod
required
string

Payment method code

isSavedAccount
boolean

Whether this is for a saved payment account

Responses

Request samples

Content type
application/json
{
  • "paymentMethod": "visamc",
  • "isSavedAccount": false
}

Response samples

Content type
application/json
{
  • "fields": [
    ],
  • "encryptor": {}
}

Initialize withdrawal with flat request structure

Initialize a new withdrawal request with a flat request structure.

This endpoint uses a flat request structure where all payment method specific fields are at the top level and optional.

For bank transfer withdrawals (bankiban):

  • New account: Provide beneficiaryName, accountNumber, and bic
  • Saved account: Provide paymentAccountId
Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
string

Withdrawal amount as decimal string

currency
required
string^[A-Z]{3}$

Currency code for the withdrawal

paymentAccountId
string

Payment account ID for previously saved payment account

paymentMethod
required
string

Payment method code

paymentGateway
required
string
Enum: "piq" "fpiq" "trumo"

Payment gateway identifier

successUrl
string <uri>

URL to redirect to after successful withdrawal

failureUrl
string <uri>

URL to redirect to after failed withdrawal

pendingUrl
string <uri>

URL to redirect to when withdrawal is pending

cancelUrl
string <uri>

URL to redirect to when withdrawal is cancelled

beneficiaryName
string

Beneficiary name (for bank transfer withdrawals)

accountNumber
string

Bank account number or IBAN (for bank transfer withdrawals)

bic
string

BIC/SWIFT code (for bank transfer withdrawals)

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "withdrawalPublicId": "w1705312200000000000",
  • "playerPublicId": "player_456",
  • "status": "requested",
  • "amount": "100.00",
  • "createdAt": "2024-01-15T10:30:00Z"
}

Initialize deposit with flat request structure

Initialize a new deposit request with a flat request structure.

This endpoint is similar to /v1/deposit/request but uses a flat request structure where all payment method specific fields are at the top level and optional.

For credit card payments, provide the card details directly in the request body. For saved payment accounts, provide the paymentAccountId.

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
string

Payment amount as decimal string

currency
required
string^[A-Z]{3}$

Currency code for the payment

paymentAccountId
string

Payment account ID for previously saved payment account

bonusPublicId
string

Optional bonus public ID to apply to the deposit

paymentMethod
required
string

Payment method code

paymentGateway
required
string
Enum: "piq" "fpiq" "trumo"

Payment gateway identifier

successUrl
string <uri>

URL to redirect to after successful payment

failureUrl
string <uri>

URL to redirect to after failed payment

pendingUrl
string <uri>

URL to redirect to when payment is pending

cancelUrl
string <uri>

URL to redirect to when payment is cancelled

cardHolder
string

Name of the card holder (for credit card payments)

encCreditcardNumber
string

Encrypted credit card number (for new credit card payments)

expiryMonth
string = 2 characters

Card expiry month in MM format (for credit card payments)

expiryYear
string = 2 characters ^\d{2}$

Card expiry year in YY format (for credit card payments)

encCvv
string

Encrypted CVV code (for credit card payments)

accountHolder
string

Account holder name (for bank transfer payments)

accountNumber
string

Bank account number or IBAN (for bank transfer payments)

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Create withdrawal request

Create a new withdrawal request for the authenticated player

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
required
string^\d+\.\d{2}$

Withdrawal amount as decimal string (e.g., "100.00")

paymentMethod
required
string (PaymentMethod)
Enum: "visamc" "bankiban" "bankid"

Payment method identifier

paymentAccountId
string

Payment account ID to use for withdrawal (optional)

object (BankIbanData)

Bank IBAN data for withdrawals

Responses

Request samples

Content type
application/json
{
  • "amount": "100.00",
  • "paymentMethod": "visamc",
  • "paymentAccountId": "123",
  • "bankIbanData": {
    }
}

Response samples

Content type
application/json
{
  • "withdrawalPublicId": "w1705312200000000000",
  • "playerPublicId": "player_456",
  • "status": "requested",
  • "amount": "100.00",
  • "createdAt": "2024-01-15T10:30:00Z"
}

Get player withdrawals

Retrieve withdrawal history for the authenticated player

Authorizations:
bearerAuth
query Parameters
status
string
Enum: "requested" "validated" "accepted" "approved" "executed" "failed"

Filter by withdrawal status

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of withdrawals to return

offset
integer >= 0
Default: 0

Number of withdrawals to skip

Responses

Response samples

Content type
application/json
{
  • "withdrawals": [
    ],
  • "total": 100,
  • "limit": 20,
  • "offset": 0
}

Get withdrawal details

Retrieve detailed information about a specific withdrawal

Authorizations:
bearerAuth
path Parameters
withdrawalId
required
string

Withdrawal ID

Responses

Response samples

Content type
application/json
{
  • "withdrawalPublicId": "w1705312200000000000",
  • "playerPublicId": "player_456",
  • "status": "requested",
  • "amount": "100.00",
  • "createdAt": "2024-01-15T10:30:00Z"
}

Cancel withdrawal

Cancel a withdrawal request by ID

Authorizations:
bearerAuth
path Parameters
withdrawalId
required
string

Withdrawal ID to cancel

Responses

Response samples

Content type
application/json
{
  • "withdrawalPublicId": "w1705312200000000000",
  • "playerPublicId": "player_456",
  • "status": "requested",
  • "amount": "100.00",
  • "createdAt": "2024-01-15T10:30:00Z"
}

Get player deposits

Retrieve deposit history for the authenticated player

Authorizations:
bearerAuth
query Parameters
status
string (DepositStatus)
Enum: "requested" "waiting_user_input" "funded" "failed" "refund_requested" "refunded"
Example: status=requested

Filter by deposit status

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of deposits to return

offset
integer >= 0
Default: 0

Number of deposits to skip

Responses

Response samples

Content type
application/json
{
  • "deposits": [
    ],
  • "total": 100,
  • "limit": 20,
  • "offset": 0
}

Get cashier history

Retrieve combined deposit and withdrawal history for the authenticated player with optional filters

Authorizations:
bearerAuth
Request Body schema: application/json
optional
from
string <date-time>

Start date for filtering transactions (inclusive)

to
string <date-time>

End date for filtering transactions (inclusive)

transactionType
string
Enum: "deposit" "withdrawal"

Filter by transaction type

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of transactions to return

offset
integer >= 0
Default: 0

Number of transactions to skip

Responses

Request samples

Content type
application/json
{
  • "from": "2024-01-01T00:00:00Z",
  • "to": "2024-12-31T23:59:59Z",
  • "transactionType": "deposit",
  • "limit": 20,
  • "offset": 0
}

Response samples

Content type
application/json
{
  • "transactions": [
    ],
  • "total": 150,
  • "limit": 20,
  • "offset": 0
}

Settings

Get brand payment settings

Brand settings

Responses

Response samples

Content type
application/json
{
  • "paymentMethods": [
    ]
}

KYC

Initialize KYC verification

Initialize a KYC (Know Your Customer) verification session with Sumsub. Returns a verification URL that the player should open in their browser or webview to complete the identity verification process.

Authorizations:
bearerAuth
Request Body schema: application/json
optional
verificationType
required
string
Enum: "idcheck" "poa"

Type of KYC verification to perform

successUrl
string

URL to redirect to after successful KYC verification

failureUrl
string

URL to redirect to after failed KYC verification

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get KYC verification status

Retrieve the current KYC verification status for the authenticated player. Returns an array of verification types (ID check, proof of address) with their status.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "verifications": [
    ]
}

Get pending KYC verification

Retrieve active KYC verification data from SumSub for the authenticated player. Returns verification object or null if no active verification found.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "id": "68f8cfe217687b136a9ea582",
  • "externalUserId": "5726346",
  • "createdAt": "2024-01-15T10:30:00Z",
  • "reviewStatus": "onHold",
  • "stage": "in_progress",
  • "reviewAnswer": "GREEN",
  • "reviewDate": "2019-08-24T14:15:22Z",
  • "levelName": "nvp-stage-basic",
  • "attemptCount": 0,
  • "info": {
    }
}

Games

List all games

Retrieve a list of all active games available in the platform

query Parameters
limit
integer [ 1 .. 2000 ]
Default: 2000

Maximum number of games to return

offset
integer >= 0
Default: 0

Number of games to skip for pagination

Responses

Response samples

Content type
application/json
{
  • "games": [
    ],
  • "total": 150,
  • "limit": 100,
  • "offset": 0
}

Launch a game

Request a game launch URL for a specific player and game via ST8

Authorizations:
bearerAuth
Request Body schema: application/json
required
gameId
required
string

Game public identifier in format "gateway:external_id" (e.g., "st8:holmes_and_the_stolen_stones_megaways")

currency
required
string

Currency code (ISO 4217)

language
string

Language code (ISO 639-3). ISO 639-1 and common language names are also accepted and will be converted automatically.

device
string
Enum: "DESKTOP" "MOBILE" "TABLET"

Device type

returnUrl
string

URL to return to after game session

depositUrl
string

URL for cashier/deposit functionality

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Launch a demo game

Request a demo game launch URL without authentication and traffic splitter registration

Request Body schema: application/json
required
gameId
required
string

Game public identifier in format "gateway:external_id" (e.g., "st8:holmes_and_the_stolen_stones_megaways")

language
string

Language code (ISO 639-3). ISO 639-1 and common language names are also accepted and will be converted automatically.

returnUrl
string

URL to return to after game session

depositUrl
string

URL for cashier/deposit functionality

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Password Reset

Request password reset

Send a password reset email to the specified email address

Request Body schema: application/json
required
email
required
string <email>

Email address to send password reset to

Responses

Request samples

Content type
application/json
{
  • "email": "player@example.com"
}

Response samples

Content type
application/json
{
  • "message": "Password reset email sent successfully",
  • "success": true
}

Confirm password reset

Complete password reset with the provided token and new password

Request Body schema: application/json
required
token
required
string

Password reset token received via email

newPassword
required
string <password> >= 8 characters

New password for the account

confirmPassword
required
string <password>

Confirmation of the new password

Responses

Request samples

Content type
application/json
{
  • "token": "abc123def456...",
  • "newPassword": "newSecurePassword123",
  • "confirmPassword": "newSecurePassword123"
}

Response samples

Content type
application/json
{
  • "message": "Password reset email sent successfully",
  • "success": true
}

Game History

Get player game history

Retrieve casino action history for the authenticated player from casino actions

Authorizations:
bearerAuth
Request Body schema: application/json
optional
gameCode
string

Filter by specific game code

actionType
string
Enum: "credit" "debit" "cancel"

Filter by casino action type

from
string <date-time>

Filter actions from this date (ISO 8601 format)

to
string <date-time>

Filter actions to this date (ISO 8601 format)

limit
integer [ 1 .. 1000 ]
Default: 100

Maximum number of actions to return

offset
integer >= 0
Default: 0

Number of actions to skip for pagination

Responses

Request samples

Content type
application/json
{
  • "gameCode": "slot_adventure",
  • "actionType": "credit",
  • "from": "2025-01-01T00:00:00Z",
  • "to": "2025-01-31T23:59:59Z",
  • "limit": 100,
  • "offset": 0
}

Response samples

Content type
application/json
{
  • "actions": [
    ],
  • "total": 250,
  • "limit": 100,
  • "offset": 0
}