Pasa de Euler Stream a Tik.Tools con una línea de configuración
Sigue usando TikTokLive (Python) o tiktok-live-connector (Node). Cambia el host del proveedor de firmas. Los mismos nombres de eventos, los mismos SDKs, el mismo código.
Mira el reemplazo directo funcionando aquí mismo
El mismo handshake que expone Euler: emisión del token firmado -> WebSocket. El iframe de abajo ejecuta la versión HTML exacta del snippet contra api.tik.tools: cópialo y pégalo, y obtienes el mismo resultado.
Dos pasos. Cero refactorización.
Cambia el host del proveedor de firmas
Dos líneas de configuración al iniciar tu SDK: apunta el backend de firmas a https://api.tik.tools en lugar de https://tiktok.eulerstream.com. Tus handlers de eventos, room IDs y código del SDK no cambian. Todos los planes de la API de tik.tools funcionan como reemplazo directo; la key de demo your_api_key funciona sin registro, con límites reducidos.
// 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)Consigue una API key real (cuando estés listo)
La key de demo your_api_key funciona sin registro, pero está limitada a 1 WebSocket / sesiones de 10 minutos / 6 conexiones por hora por IP. Obtén una key de Tik.Tools gratis para tener límites más altos + paridad total con los endpoints de Euler.
Cada endpoint de Euler tiene su equivalente 1:1
Tik.Tools replica los endpoints de Euler, así que los SDKs que ya hablan con Euler siguen funcionando sin ningún parche.
| Euler Stream | Tik.Tools (misma ruta) | Plan |
|---|---|---|
POST /webcast/sign_url | POST /webcast/sign_url | Demo |
GET /webcast/check_alive | GET /webcast/check_alive | Demo |
POST /webcast/fetch | POST /webcast/fetch | Basic+ |
POST /webcast/ws_credentials | POST /webcast/ws_credentials | Basic+ |
POST /webcast/sign_websocket | POST /webcast/sign_websocket | Basic+ |
GET /webcast/room_id | GET /webcast/room_id | Demo |
POST /webcast/room_info | POST /webcast/room_info | Demo |
POST /webcast/bulk_live_check | POST /webcast/bulk_live_check | Basic+ |
| Extra (no está en Euler): ticker público, rankings | Demo | |
{ status_code, data: { signed_url, x_bogus, user_agent, cookies } }. Tu parser actual sigue funcionando.El mismo JSON, más una pista de migración
POST https://api.tik.tools/webcast/sign_url?apiKey=your_api_key
Body: { "url": "<upstream URL>" }
Response:
{
"status_code": 0,
"data": {
"signed_url": "<signed upstream URL>",
"x_bogus": "...",
"user_agent": "Mozilla/5.0 ...",
"cookies": "ttwid=<fresh visitor cookie>"
}
}El plan gratis cubre la migración + tu primer despliegue en producción
Planes Sandbox + Basic gratis. Sin tarjeta de crédito. Límites más altos cuando lances.