Appearance
Reference
Multi-currency model
Each (player, currency) pair is a distinct identity on TS's side. For a player who can hold balances in multiple currencies, send a distinct userId variant per currency — e.g. 123_usd, 123_jpy, 123_usdt. Keep each variant stable. Avoid dashes in the userId.
Switching currencies = a fresh launch (new launch token, new iFrame URL).
Currency codes
Send currencyCode (alpha, lowercase or uppercase — pick a convention and stick with it) in query strings and userCurrency (numeric) in cookies.
| currencyCode | userCurrency | currencyCode | userCurrency | |
|---|---|---|---|---|
| usd | 1 | aed | 39 | |
| eur | 2 | ngn | 40 | |
| aud | 3 | ugx | 41 | |
| cny | 4 | ghs | 42 | |
| gbp | 5 | sol | 43 | |
| jpy | 6 | bnb | 44 | |
| rub | 7 | usdc | 45 | |
| brl | 8 | trx | 46 | |
| pln | 9 | matic | 47 | |
| cad | 10 | |||
| mxn | 11 | |||
| chf | 12 | |||
| thb | 13 | |||
| btc | 14 | |||
| mbt | 15 | |||
| sek | 16 | |||
| dkk | 17 | |||
| nok | 18 | |||
| cgx | 19 | |||
| idr | 20 | |||
| kes | 21 | |||
| zar | 22 | |||
| eth | 23 | |||
| ltc | 24 | |||
| usdt | 25 | |||
| cent | 26 | |||
| vnd | 27 | |||
| try | 28 | |||
| inr | 29 | |||
| dash | 30 | |||
| doge | 31 | |||
| eos | 32 | |||
| xrp | 33 | |||
| myr | 34 | |||
| php | 35 | |||
| gcd | 36 | |||
| krw | 37 | |||
| bdt | 38 |
Send currency consistently across all callbacks for a given trade — TS uses it as part of the wallet identity lookup.
Language codes
Lowercase 2-letter ISO 639-1, with regional suffix where applicable:
en, ar, es, fr, it, kr, lv, nl, pt, ru, tr, zh-cn, zh-tw, hy, de, ja, et, sv,
hu-hu, id, ms, vi, th, fi, cs, es-mx, bg, el, lt, no, pl, ro, skFormat rules:
languagequery param at Step-1 → uppercase 2-letter (EN,JA,ES).languageSelectpostMessage payload → lowercase with regional suffix (en,ja,zh-cn,es-mx).
Language switching (postMessage)
To change the iFrame's language at runtime without re-authentication, your parent page posts a message:
js
const iframe = document.getElementById('ts-tap')
const iframeOrigin = new URL(iframe.src).origin
function setLang(code) {
iframe.contentWindow.postMessage(
{ type: 'languageSelect', payload: code },
iframeOrigin
)
}
iframe.addEventListener('load', () => setLang('en')) // initial sync
document.getElementById('lang-select').addEventListener('change', e => setLang(e.target.value))Origin rules:
- Post to the iFrame's origin only (scheme + host + port — NOT a full URL).
- Compute origin from
iframe.srcso it adapts when TS changes hosts.
There's only one supported event type for now: languageSelect.