Only for real money.

Before starting the game, your server should make a foreground request to obtain the link. Then, redirect the player to the link received in the response.

Example in Go

package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"sort"
	"strings"
	"time"
)

func main() {
	// Method and API endpoint
	method := "games.link"
	// Use your entry domain, that you currently use for games.start
	apiEndpoint := "<https://use-your-entry-domain/>" + method

	// Partner information
	partnerAlias := "test"
	secretKey := "testsecret"

	// Request parameters
	params := map[string]string{
		"partner.alias":    partnerAlias,
		"partner.session":  "ed7a371f-ee3c-40bd-9c7d-8cb77f2031c7",
		"id_player":        "891283294",
		"id_group":         "default",
		"balance":          "1",
		"currency":         "EUR",
		"game.provider":    "pragmatic",
		"game.alias":       "vs1024lionsd",
		"lang":             "en",
		"lobby_url":        "<https://google.com>",
		"client_ip":        "127.0.0.1",
		"mobile":           "auto",
		"user_agent":       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
		"timestamp_millis": fmt.Sprintf("%d", time.Now().UnixMilli()),
		//"force_region":     "EU" - OPTIONAL, if you need to foce select cluster region
	}

	// Generate signature
	sign := generateSign(params, method, partnerAlias, secretKey)
	params["signature"] = sign

	// Create query string
	values := url.Values{}
	for key, value := range params {
		values.Add(key, value)
	}

	// Create request URL with query parameters
	requestURL := apiEndpoint + "?" + values.Encode()

	// Create HTTP client and request
	client := &http.Client{}
	req, err := http.NewRequest("GET", requestURL, nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// Execute request
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error executing request:", err)
		return
	}
	defer resp.Body.Close()

	// Read and print response
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response:", err)
		return
	}

	fmt.Println("Response:")
	fmt.Println(string(body))
}

func generateSign(params map[string]string, method, partnerAlias, secretKey string) string {

	// Join parameters in required format
	var pairs []string
	for k, v := range params {
		if k != "signature" {
			pairs = append(pairs, k+"="+v)
		}
	}
	sort.Strings(pairs)
	joined := strings.Join(pairs, "&")

	// Create string to sign
	stringToSign := joined + "&" + method + "&" + partnerAlias + "&" + secretKey

	// Calculate MD5 hash
	hash := md5.Sum([]byte(stringToSign))
	signature := hex.EncodeToString(hash[:])

	fmt.Println("stringToSign: ", stringToSign)
	fmt.Println("signature: ", signature)

	return signature
}

Response example:

{
  "status": 200,
  "cmd": "games.link",
  "response": {
    "trace": "E-1b22649efd401000",
    "link": "<https://pp.mobule.games/games.start?currency=EUR\\u0026game.alias=vs1024lionsd\\u0026game.provider=pragmatic\\u0026lang=en\\u0026lobby_url=https%3A%2F%2Fgoogle.com\\u0026mobile=false\\u0026partner.alias=ddddddd\\u0026partner.session=ed7a371f-ee3c-40bd-9c7d-8cb77f2031c7>"
  }
}