Skip to main content

IPlayGames Python SDK

High-level Python SDK for the IPlayGames Game Aggregator API.

Installation

pip install iplaygames-sdk

This will automatically install the iplaygames-api dependency.

Quick Start

from iplaygames import Client

client = Client(
    api_key='your-api-key',
    base_url='https://api.gamehub.com',  # Configurable!
)

# Get games
games = client.games().list(currency='USD')

# Start a game session
session = client.sessions().start(
    game_id=123,
    player_id='player_456',
    currency='USD',
    country_code='US',
    ip_address='192.168.1.1',
)

# Redirect player to game
game_url = session['game_url']

Configuration

client = Client(
    api_key='your-api-key',           # Required
    base_url='https://api.gamehub.com',  # Optional, defaults to https://api.gamehub.com
    timeout=30,                        # Optional, request timeout in seconds
    webhook_secret='your-secret',      # Optional, for webhook verification
)

Available Flows

Games

# List games with filters
games = client.games().list(
    currency='USD',
    country='US',
    category='slots',
    search='bonanza',
)

# Get single game
game = client.games().get(123)

# Convenience methods
pragmatic_games = client.games().by_producer('Pragmatic Play')
live_games = client.games().by_category('live')
search_results = client.games().search('sweet bonanza')
player_games = client.games().for_player('USD', 'US')

Sessions

# Start a game session
session = client.sessions().start(
    game_id=123,
    player_id='player_456',
    currency='USD',
    country_code='US',
    ip_address=request.remote_addr,
    locale='en',
    device='mobile',
    return_url='https://casino.com/lobby',
)

# Get session status
status = client.sessions().status(session['session_id'])

# End session
client.sessions().end(session['session_id'])

# Start demo session
demo = client.sessions().start_demo(123)

Jackpot

# Get configuration
config = client.jackpot().get_configuration()

# Get all pools
pools = client.jackpot().get_pools()

# Get specific pool
daily_pool = client.jackpot().get_pool('daily')
weekly_pool = client.jackpot().get_pool('weekly')

# Get winners
winners = client.jackpot().get_winners('daily')

# Manage games
client.jackpot().add_games('daily', [1, 2, 3])
client.jackpot().remove_games('daily', [1])

Promotions

# List promotions
promotions = client.promotions().list(status='active')

# Get promotion details
promo = client.promotions().get(1)

# Get leaderboard
leaderboard = client.promotions().get_leaderboard(1)

# Opt-in player
client.promotions().opt_in(1, 'player_456', 'USD')

Jackpot Widgets

# 1. Register your domain
domain = client.jackpot_widget().register_domain('casino.example.com')
domain_token = domain['domain_token']

# 2. Create anonymous token (view-only)
token = client.jackpot_widget().create_anonymous_token(domain_token)

# 3. Create player token (can start game sessions)
player_token = client.jackpot_widget().create_player_token(
    domain_token,
    'player_456',
    'USD'
)

# 4. Get embed code for your frontend
embed_code = client.jackpot_widget().get_embed_code(token['token'], {
    'theme': 'dark',
    'container': 'jackpot-widget',
})

Promotion Widgets

# Same flow as jackpot widgets
domain = client.promotion_widget().register_domain('casino.example.com')
token = client.promotion_widget().create_player_token(
    domain['domain_token'],
    'player_456',
    'USD'
)
embed_code = client.promotion_widget().get_embed_code(token['token'])

Multi-Session (TikTok-style Game Swiping)

# Start multi-session
multi_session = client.multi_session().start(
    player_id='player_456',
    currency='USD',
    country_code='US',
    ip_address=request.remote_addr,
    device='mobile',
)

# Get iframe HTML to embed the swipe UI
iframe = client.multi_session().get_iframe(multi_session['swipe_url'], {
    'width': '100%',
    'height': '100vh',
})

# Get status
status = client.multi_session().status(multi_session['multi_session_id'])

# End when player leaves
client.multi_session().end(multi_session['multi_session_id'])

Handling Webhooks

GameHub sends webhooks for transactions. Your casino must implement a webhook endpoint.

Webhook Types

Type Description
authenticate Verify player exists and get initial data
balance_check Get current player balance
bet Player placed a bet
win Player won money
rollback Undo a transaction
reward Award from promotions/tournaments

Implementing Your Webhook Handler (Flask)

from flask import Flask, request, jsonify
from iplaygames import Client, WebhookHandler
import os

app = Flask(__name__)

client = Client(
    api_key=os.environ['GAMEHUB_API_KEY'],
    webhook_secret=os.environ['GAMEHUB_WEBHOOK_SECRET'],
)

@app.route('/webhooks/gamehub', methods=['POST'])
def handle_webhook():
    payload = request.get_data(as_text=True)
    signature = request.headers.get('X-Signature')

    # Verify signature
    handler = client.webhooks()

    if not handler.verify(payload, signature):
        return jsonify({'error': 'Invalid signature'}), 401

    # Parse webhook
    webhook = handler.parse(payload)

    # Handle by type
    if webhook.type == WebhookHandler.TYPE_AUTHENTICATE:
        return handle_authenticate(webhook)
    elif webhook.type == WebhookHandler.TYPE_BALANCE_CHECK:
        return handle_balance_check(webhook)
    elif webhook.type == WebhookHandler.TYPE_BET:
        return handle_bet(webhook)
    elif webhook.type == WebhookHandler.TYPE_WIN:
        return handle_win(webhook)
    elif webhook.type == WebhookHandler.TYPE_ROLLBACK:
        return handle_rollback(webhook)
    elif webhook.type == WebhookHandler.TYPE_REWARD:
        return handle_reward(webhook)

    return jsonify({'error': 'Unknown webhook type'}), 400


def handle_authenticate(webhook):
    player = Player.query.get(webhook.player_id)

    if not player:
        return jsonify(client.webhooks().player_not_found_response())

    balance = player.get_balance(webhook.currency)

    return jsonify(client.webhooks().success_response(balance, {
        'player_name': player.name,
    }))


def handle_bet(webhook):
    player = Player.query.get(webhook.player_id)
    balance = player.get_balance(webhook.currency)
    bet_amount = webhook.get_amount_in_dollars()

    # Check funds
    if balance < bet_amount:
        return jsonify(client.webhooks().insufficient_funds_response(balance))

    # Check idempotency
    existing = Transaction.query.filter_by(external_id=webhook.transaction_id).first()
    if existing:
        return jsonify(client.webhooks().already_processed_response(balance))

    # Process bet
    player.debit(bet_amount, webhook.currency)
    Transaction.create(
        external_id=webhook.transaction_id,
        player_id=webhook.player_id,
        type='bet',
        amount=bet_amount,
        currency=webhook.currency,
    )
    db.session.commit()

    new_balance = player.get_balance(webhook.currency)
    return jsonify(client.webhooks().success_response(new_balance))


# ... implement other handlers similarly

Django Example

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from iplaygames import Client, WebhookHandler
import json

client = Client(
    api_key=settings.GAMEHUB_API_KEY,
    webhook_secret=settings.GAMEHUB_WEBHOOK_SECRET,
)

@csrf_exempt
def webhook_handler(request):
    if request.method != 'POST':
        return JsonResponse({'error': 'Method not allowed'}, status=405)

    payload = request.body.decode('utf-8')
    signature = request.headers.get('X-Signature')

    handler = client.webhooks()

    if not handler.verify(payload, signature):
        return JsonResponse({'error': 'Invalid signature'}, status=401)

    webhook = handler.parse(payload)

    # Handle webhook by type...
    return JsonResponse(handler.success_response(balance))

Webhook Payload Fields

Common Fields (all webhook types)

webhook.type         # 'bet', 'win', 'rollback', 'reward', 'authenticate', 'balance_check'
webhook.player_id    # Player's ID in your system
webhook.currency     # 'USD', 'EUR', etc.
webhook.game_id      # Game ID (nullable)
webhook.game_type    # 'slot', 'live', 'table', etc.
webhook.timestamp    # ISO 8601 timestamp

Transaction Fields (bet, win, rollback, reward)

webhook.transaction_id            # Unique transaction ID
webhook.amount                    # Amount in cents
webhook.get_amount_in_dollars()   # Amount in dollars
webhook.session_id                # Game session ID
webhook.round_id                  # Game round ID

Freespin Fields

webhook.is_freespin               # Is this a freespin round?
webhook.freespin_id               # Freespin campaign ID
webhook.freespin_total            # Total freespins awarded
webhook.freespins_remaining       # Remaining freespins
webhook.freespin_round_number     # Current spin number
webhook.freespin_total_winnings   # Cumulative winnings

Error Handling

from iplaygames import Client, ApiError

try:
    session = client.sessions().start(...)
except ApiError as e:
    print(f"API Error: {e.status} - {e.message}")
    print(f"Details: {e.data}")
except Exception as e:
    print(f"Unexpected error: {e}")

Async Support

import asyncio
from iplaygames import AsyncClient

async def main():
    client = AsyncClient(
        api_key='your-api-key',
        base_url='https://api.gamehub.com',
    )

    games = await client.games().list(currency='USD')

    # Run multiple requests concurrently
    results = await asyncio.gather(
        client.games().list(currency='USD'),
        client.jackpot().get_pools(),
        client.promotions().list(),
    )

asyncio.run(main())

Running Tests

python -m pytest tests/

License

MIT

Metadata

Release files for iplaygames-sdk 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iplaygames-sdk 1.0.2
File Size Uploaded Provenance Actions
iplaygames_sdk-1.0.2.tar.gz 18.9 kB Without provenance Details for iplaygames_sdk-1.0.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for iplaygames-sdk 1.0.2
File Interpreter ABI Platform Actions
iplaygames_sdk-1.0.2-py3-none-any.whl Python 3 none any Details for iplaygames_sdk-1.0.2-py3-none-any.whl

Total release size: 38.2 kB

Release files / iplaygames_sdk-1.0.2.tar.gz

Download URL iplaygames_sdk-1.0.2.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
725e9927f6b70cdf38415ba7811f98030ad9db54eb401e3e2fbe30381519a5a0
BLAKE2b-256 checksum
How to use checksums
9d6374062b0d60f1fedc6503907d9783f447566954891abba51fb1f9823d9e86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / iplaygames_sdk-1.0.2-py3-none-any.whl

Download URL iplaygames_sdk-1.0.2-py3-none-any.whl
Size 19.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1b8972aa6255397dc632088a8d41a285038b636ac19d84ba8918f3bed66d9cf3
BLAKE2b-256 checksum
How to use checksums
8fe45e8026c3c92702d1e4fcad3e9e024d594aa3e828387dd6235a53eaa884c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Security for iplaygames-sdk 1.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page