SoftAggregator API documentation

Integrate 4,000+ casino games through one seamless-wallet API. This reference covers everything you need to list games, create players, launch games, award free rounds and handle wallet callbacks.

Introduction

The SoftAggregator API uses a seamless wallet model: your platform keeps player balances, and our API calls your callback URL for every balance check, bet and win. All API methods are sent as POST requests with a JSON body to a single endpoint.

Base URL
https://api.softaggregator.com/api/v1

Authentication

Every request includes your api_login and api_password (issued in your operator backend after approval). The method field selects the operation.

{
  "api_login": "YOUR_API_LOGIN",
  "api_password": "YOUR_API_PASSWORD",
  "method": "getGameList"
}

getGameListGet game list

Returns all games available to you. Use each game's id_hash when launching a game.

POST /api/v1
{ "api_login": "...", "api_password": "...", "method": "getGameList" }

→ {
  "error": 0,
  "response": [
    {
      "id": 483,
      "name": "Game Name",
      "type": "video-slots",
      "category": "pragmaticplay",
      "id_hash": "provider/GameName",
      "freerounds_supported": true,
      "play_for_fun_supported": true,
      "image": "https://.../GameName.webp"
    }
  ]
}

createPlayerCreate player

Creates (or ensures) a player on the system before launching a game.

{ "api_login":"...", "api_password":"...", "method":"createPlayer",
  "user_username":"player123", "user_password":"secret", "currency":"USD" }

→ { "error": 0, "response": { ... } }

getGameLaunch game

Returns the URL to load the game in an iframe. Use the id_hash from getGameList as gameid.

FieldDescription
user_usernamePlayer username
user_passwordPlayer password
gameidGame id_hash
langLanguage code, e.g. en
homeurlReturn URL after the player exits
play_for_funOptional — demo mode
{ "api_login":"...", "api_password":"...", "method":"getGame",
  "user_username":"player123", "user_password":"secret",
  "gameid":"provider/GameName", "lang":"en", "currency":"USD",
  "homeurl":"https://yourcasino.com" }

→ { "error": 0, "response": "https://game-launch-url..." }
For demo play use method: "getGameDemo" with the same parameters.

addFreeRoundsFree rounds

Award free spins on a supported game (freerounds_supported: true in the game list).

{ "api_login":"...", "api_password":"...", "method":"addFreeRounds",
  "user_username":"player123", "user_password":"secret",
  "gameid":"provider/GameName", "freespins":10, "bet_level":0,
  "valid_days":7, "currency":"USD" }

Use getFreeRounds to list and deleteFreeRounds to remove them.

Wallet callbacks

We call your callback URL (set in your operator backend) for every player balance change. Callbacks are sent as GET requests. Your endpoint must always return HTTP 200; communicate errors only via the JSON body. Balances are always integers in cents (e.g. $2.50 → 250).

action: balance

Sent at the start of a session to read the player's balance.

GET {your_callback}?username=player123¤cy=USD&action=balance
     &call_id=...×tamp=...&key=...

← { "error": 0, "balance": 250 }

action: debit / credit

debit subtracts a bet; credit adds a win. call_id is the unique transaction id — use it to de-duplicate. If funds are insufficient on a debit, return error: 1 with the current balance.

GET {your_callback}?username=player123¤cy=USD&action=debit
     &amount=100&type=spin&round_id=...&game_id=provider/GameName
     &call_id=...×tamp=...&rb=0&key=...

← { "error": 0, "balance": 150 }
FieldDescription
amountAmount in cents
actiondebit | credit | balance
typespin, or bonus_fs for free spins (do not deduct on debit)
call_idUnique transaction id (de-dup)
round_idGame round id
game_idGame id_hash
rb1 = rollback (process like a normal debit/credit)

Signature validation

Every callback carries timestamp and key. Validate that the timestamp is within 30 seconds and that the key matches:

key = md5(timestamp + your_salt_key)

Your salt_key is shown in your operator backend. If validation fails, return { "error": 2, "balance": 0 }.

Error codes

CodeMeaning
0Success
1Insufficient balance (return current balance)
2Processing error / invalid signature / player not found

Need help integrating? Contact us on Telegram @mentionso or email [email protected].