Beschreibungen auf Englisch
private-cartesia-voice-clones.{userId}
Progress of your Cartesia voice clones: one event per status change of a clone created via POST /voices/cartesia/clones (or in the web dashboard). Key permission: voices.read.
Kanalparameter
Tragen Sie Ihre Werte ein — sie erscheinen im Kanalnamen, im Code darunter und in der Konsole. Sie werden nirgends gesendet und landen nie in der Seiten-URL.
is the numeric id of the key owner, returned by GET /user.
Kanalname für das Abo
private-cartesia-voice-clones.{userId}
Der Name enthält noch Platzhalter in geschweiften Klammern. Damit lässt sich nicht abonnieren: Der Server autorisiert Kanäle nach exaktem Namen.
import Pusher from 'pusher-js';
const pusher = new Pusher('7c4dd881d8116ac76fe89aff71d8c2ff', {
wsHost: 'ws.lumean.app',
wsPort: 443, wssPort: 443,
forceTLS: true,
enabledTransports: ['ws', 'wss'],
cluster: '',
channelAuthorization: {
endpoint: 'https://api.lumean.app/api/public/broadcasting/auth',
headers: { 'X-API-KEY': 'YOUR_API_KEY' },
},
});
const channel = pusher.subscribe('private-cartesia-voice-clones.{userId}');
channel.bind('voice_clone.updated', (data) => {
console.log(data);
});import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
const echo = new Echo({
broadcaster: 'pusher',
key: '7c4dd881d8116ac76fe89aff71d8c2ff',
wsHost: 'ws.lumean.app',
wsPort: 443, wssPort: 443,
forceTLS: true,
enabledTransports: ['ws', 'wss'],
cluster: '',
authEndpoint: 'https://api.lumean.app/api/public/broadcasting/auth',
auth: { headers: { 'X-API-KEY': 'YOUR_API_KEY' } },
});
echo.private('cartesia-voice-clones.{userId}')
// der führende Punkt gilt für Laravel Echo; pusher-js kennt ihn nicht
.listen('.voice_clone.updated', (e) => {
console.log(e);
});# pip install websocket-client requests
import json, requests, websocket
APP_KEY = "7c4dd881d8116ac76fe89aff71d8c2ff"
WS_URL = "wss://ws.lumean.app:443/app/" + APP_KEY + "?protocol=7&client=python&version=1.0"
CHANNEL = "private-cartesia-voice-clones.{userId}"
ws = websocket.create_connection(WS_URL)
# 1. socket_id aus dem Ereignis pusher:connection_established holen
hello = json.loads(ws.recv())
socket_id = json.loads(hello["data"])["socket_id"]
# 2. privates Abo mit dem eigenen API-Schlüssel autorisieren
auth = requests.post("https://api.lumean.app/api/public/broadcasting/auth",
headers={"X-API-KEY": "YOUR_API_KEY"},
data={"socket_id": socket_id, "channel_name": CHANNEL},
).json()["auth"]
# 3. abonnieren und Ereignisse empfangen
ws.send(json.dumps({"event": "pusher:subscribe",
"data": {"auth": auth, "channel": CHANNEL}}))
while True:
print(ws.recv())Payload-Beispiel
Kanal: private-cartesia-voice-clones.{userId}
Dies ist ein Beispiel aus der Spezifikation. Es besteht keine Verbindung und es wird auch keine vorgetäuscht: Für ein echtes Abo brauchen Sie Ihren API-Schlüssel.
.voice_clone.updated
{
"voice_clone": {
"id": "<uuid>",
"provider": "cartesia",
"display_name": "string",
"language": "ru",
"description": "string",
"status": "pending",
"voice_id": "string",
"attempts": 1,
"error": {
"reason": "string",
"message": "string"
},
"created_at": "<date-time>",
"completed_at": "<date-time>",
"failed_at": "<date-time>",
"banned_at": "<date-time>",
"ban_reason": "string"
}
}Kanalereignisse: 1
Jedes Ereignis hat einen eigenen Anker, eine vollständige Payload-Tabelle mit Beschreibungen und Enums sowie ein Formbeispiel. Die Namen stehen in Laravel-Echo-Notation — mit führendem Punkt.
.voice_clone.updated
Echo: .voice_clone.updated · pusher-js: voice_clone.updated
A Cartesia voice clone was created or changed status (pending → cloning → ready or failed; archived after deletion). voice_id appears only once the clone is ready — put it into tts_settings.voice_id of a Cartesia template.
Payload-Felder
voice_cloneerforderlichobject
Clone status. banned — a moderator blocked the clone: it is not accepted for new orders and cannot be deleted; the reason is in ban_reason.
The Cartesia voice id — the value for tts_settings.voice_id of a template. Present only once the clone is ready, otherwise null.
errorerforderlichobject | null
processing_error, max_retries, network, timeout, dispatch_failed
Why a moderator blocked the clone, or null.
Payload-Beispiel
{
"voice_clone": {
"id": "<uuid>",
"provider": "cartesia",
"display_name": "string",
"language": "ru",
"description": "string",
"status": "pending",
"voice_id": "string",
"attempts": 1,
"error": {
"reason": "string",
"message": "string"
},
"created_at": "<date-time>",
"completed_at": "<date-time>",
"failed_at": "<date-time>",
"banned_at": "<date-time>",
"ban_reason": "string"
}
}Die Werte stammen aus der Spezifikation, soweit vorhanden; der Rest sind typbasierte Platzhalter. Das ist die Form des Ereignisses, keine Aufzeichnung eines echten.
Alle Kanäle und Verbindungsparameter·POST /broadcasting/auth
Diese Seite einer KI geben
Spezifikation 0.0.1