One-config-line migration

Move from Euler Stream to Tik.Tools in one config line

Keep TikTokLive (Python) or tiktok-live-connector (Node). Swap the sign-provider host. Same event names, same SDKs, same code.

Get free API key
Live preview

See the drop-in working right here

Same handshake Euler exposes: signed-token mint -> WebSocket. The iframe below runs the exact HTML version of the snippet against api.tik.tools - copy and paste it, you get the same output.

euler-dropin.htmlRUNNING
Preview loads once visible.
Pick any language (Node / Python / HTML / LLM prompt)
Step by step

Two steps. Zero refactor.

1

Swap the sign-provider host

Two config lines in your SDK init - point the signing backend at https://api.tik.tools instead of https://tiktok.eulerstream.com. Existing event handlers, room IDs, and SDK code stay unchanged. All tik.tools API tiers work as drop-in replacements; the demo key your_api_key works without signup at reduced limits.

// Node — tiktok-live-connector v2.x (verified working against api.tik.tools)
import { TikTokLiveConnection, SignConfig, WebcastEvent } from 'tiktok-live-connector'

SignConfig.basePath = 'https://api.tik.tools'    // was: https://tiktok.eulerstream.com
SignConfig.apiKey   = 'tk_your_key'              // your tik.tools key

const conn = new TikTokLiveConnection('@username', { fetchRoomInfoOnConnect: false })
conn.on(WebcastEvent.CHAT, e => console.log(e.user.uniqueId, ':', e.comment))
await conn.connect()

// Or env-var (no code change at all):
//   SIGN_API_URL=https://api.tik.tools  SIGN_API_KEY=tk_your_key  node app.js
# Python — TikTokLive v6.6+ (one config swap, existing code unchanged)
from TikTokLive.client.web.web_settings import WebDefaults
from TikTokLive import TikTokLiveClient
from TikTokLive.events import CommentEvent

WebDefaults.tiktok_sign_url     = "https://api.tik.tools"   # was: https://tiktok.eulerstream.com
WebDefaults.tiktok_sign_api_key = "tk_your_key"

client = TikTokLiveClient(unique_id="@username")

@client.on(CommentEvent)
async def on_chat(ev): print(ev.user.unique_id, ":", ev.comment)

await client.connect()   # add fetch_live_check=False if running from a datacenter IP

# Or env-var (zero code change):
#   SIGN_API_URL=https://api.tik.tools SIGN_API_KEY=tk_your_key python app.py
// Direct @eulerstream/euler-api-sdk users — swap basePath
import { EulerStreamApiClient } from '@eulerstream/euler-api-sdk'

const client = new EulerStreamApiClient({
  basePath: 'https://api.tik.tools',
  apiKey:   'tk_your_key',
})

// Every webcast.* / premium.* / moderation.* method routes to tik.tools.
const res = await client.webcast.retrieveRoomId('username')
console.log(res.data.room_id)
2

Grab a real API key (when ready)

The demo key your_api_key works without signup but is capped at 1 WebSocket / 10-minute sessions / 6 connects per hour per IP. Get a free Tik.Tools key for higher limits + full Euler endpoint parity.

Endpoint parity

Every Euler endpoint maps 1:1

Tik.Tools mirrors the Euler endpoint surface so SDKs that already speak Euler keep working with zero patches.

Euler StreamTik.Tools (same path)Tier
POST /webcast/sign_urlPOST /webcast/sign_urlDemo
GET /webcast/check_aliveGET /webcast/check_aliveDemo
POST /webcast/fetchPOST /webcast/fetchBasic+
POST /webcast/ws_credentialsPOST /webcast/ws_credentialsBasic+
POST /webcast/sign_websocketPOST /webcast/sign_websocketBasic+
GET /webcast/room_idGET /webcast/room_idDemo
POST /webcast/room_infoPOST /webcast/room_infoDemo
POST /webcast/bulk_live_checkPOST /webcast/bulk_live_checkBasic+
Bonus (not in Euler): public ticker, AI live captions, leaderboardsDemo
Same response shape. sign_url returns { status_code, data: { signed_url, x_bogus, user_agent, cookies } }. Your existing parser keeps working.
Response shape

Identical JSON, plus a migration hint

POST https://api.tik.tools/webcast/sign_url?apiKey=your_api_key
Body: { "url": "https://webcast.tiktok.com/webcast/im/fetch/?aid=1988&room_id=..." }

Response:
{
  "status_code": 0,
  "data": {
    "signed_url": "https://webcast.tiktok.com/webcast/im/fetch/?...&X-Bogus=...",
    "x_bogus": "RKPK4UcKQgMZszAf",
    "user_agent": "Mozilla/5.0 ...",
    "cookies": "tt-target-idc=...; msToken=..."
  }
}

Free tier covers the migration + your first production deploy

Sandbox + Basic tiers free. No credit card. Higher rate limits when you ship.