Skip to content
Lumean API

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.

Channel parameters

Fill in your values — they appear in the channel name, in the code below and in the console. They are sent nowhere and never end up in the page URL.

is the numeric id of the key owner, returned by GET /user.

Channel name to subscribe to

private-cartesia-voice-clones.{userId}

The name still contains placeholders in braces. You cannot subscribe with it: the server authorizes channels by exact name.

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);
});

Payload example

not connected

Channel: private-cartesia-voice-clones.{userId}

This is an example from the spec. There is no connection and none is simulated: subscribing for real needs your API key.

needs a key with the voices.read scope

.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"
  }
}

Channel events: 1

Every event has its own anchor, a full payload table with descriptions and enums, and a sample shape. Names are shown in Laravel Echo notation — with the leading dot.

.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 fields

voice_clonerequired
object
idrequired
string (uuid)
providerrequired
Valuescartesia
string
display_namerequired
string
languageoptional
string | null
Example ru
descriptionoptional
string | null
statusrequired

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.

Valuespendingcloningreadyfailedarchivedbanned
string
voice_idrequired

The Cartesia voice id — the value for tts_settings.voice_id of a template. Present only once the clone is ready, otherwise null.

string | null
attemptsrequired
integer
Example 1
errorrequired
object | null
reasonoptional

processing_error, max_retries, network, timeout, dispatch_failed

string
messageoptional
string | null
created_atrequired
string (date-time)
completed_atoptional
string (date-time) | null
failed_atoptional
string (date-time) | null
banned_atoptional
string (date-time) | null
ban_reasonoptional

Why a moderator blocked the clone, or null.

string | null

Payload example

{
  "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"
  }
}

Values come from the spec where the spec has them; the rest are type-based placeholders. This is the shape of the event, not a recording of a real one.

All channels and connection parameters·POST /broadcasting/auth

Feed this page to an AI

Open .mdllm.md

spec 0.0.1