@taskmagic/apps-unmixr
v0.0.2
Published
AI text-to-speech and voiceover generation with [Unmixr](https://unmixr.com) — API docs: https://unmixr.com/api/v2/docs/
Readme
Unmixr
AI text-to-speech and voiceover generation with Unmixr — API docs: https://unmixr.com/api/v2/docs/
The API is REST under https://unmixr.com/api/v2, authenticated with
Authorization: Bearer <API key>. Every path ends in a trailing slash (/short-tts/,
/voices/, /credits/); the piece appends one automatically because a missing slash is
answered with a redirect rather than the endpoint.
- Actions: Text to Speech, Create Long TTS Project, Get Long TTS Project, List Voices, Get Voice, List Cloned Voices, Estimate Credits, Get Credit Balance.
- Triggers: none — see No triggers below.
Connection: sign in at app.unmixr.com, open
app.unmixr.com/manage-api-keys/ (the Manage API
Keys page), create a key and choose v2 as the key version, then paste it into the
connection. API access is a paid feature — it starts on the Starter plan ($19/month); a free
account answers every call with 401 and a "no API access" message.
Notes
- Text to Speech is synchronous and capped at 2,000 characters. Past the cap Unmixr answers
with application code
502telling you to use Long TTS, so the action checks the length locally first and points you at Create Long TTS Project without spending a request. - Long TTS gives you one audio file per paragraph, not one merged track. The API publishes
no stitched output URL: each paragraph carries its own
audio_url, which staysnulluntil that paragraph finishes. Get Long TTS Project therefore returns an array —audio_urlsin paragraph order, plusparagraph_count,completed_paragraph_count,failed_paragraph_countandis_finished. Joining them into a single file is up to you. Project status isprocessing,success,partial(some paragraphs failed) orfailed; paragraph status isprocessing,completedorfailed.is_finishedonly means Unmixr has stopped working on the project — branch onis_successful/is_partial/is_failedbefore joining the files, becauseaudio_urlsomits paragraphs that never rendered. - The Long TTS callback URL is required even though the field looks optional. Unmixr
documents
callbackas a required part of the request body, so the action refuses to submit without anhttpsURL. Add a Catch Hook trigger to another TaskMagic flow and paste its webhook URL in; Unmixr will post progress there. The optional Callback Secret is passed through so the receiving flow can verify the sender. - No triggers. Unmixr has no account-level webhook registration endpoint — the
callbackobject is supplied per Long TTS request, which makes it a callback rather than a subscribable webhook. A trigger could never register or unregister itself, so none is shipped. Use the callback URL above, or poll with Get Long TTS Project. - No voice-cloning action — deliberately. Unmixr does expose voice cloning
(
POST /api/v1/clone-voice/, and v1/v2 keys are interchangeable, so it is technically reachable). It is left out on purpose: Unmixr's guidance is that a user may clone a voice "given they have their consent", but there is no technical consent-verification gate — the attestation is the only control. Automating the creation of voice clones from arbitrary uploaded audio is exactly the impersonation-risk surface we do not want to make one click away. Reading the clones an account already has is fine and is covered by List Cloned Voices, whose UUIDs work anywhere a voice ID is accepted (they also appear at the top of the Voice dropdown). - Prosody controls are not in this version. v1 of the API names these fields
speaking_rate/speaking_pitch/speaking_volume/output_type/pronunciation_dict, while the v2 docs name themspeed/pitch/volume/output_format/pronunciations. We could not verify the v2 names against a live key, so v0.0.1 ships only the fields we are confident about —text,voice_id,output_format,response_typeandlanguageon Text to Speech, andtext/character/voice_id/pause_before_ms/pause_after_ms/typeon Long TTS paragraphs.response_typeoffers URL and Base64 only; Unmixr's raw-bytes option is left out because a binary body cannot survive a JSON step output intact.style,speed,pitch,volume,pronunciationsand the per-characterinstructionswill be added once they are confirmed against a real account. - The voice list is plan-filtered, and 1,100+ voices deep. The Voice dropdown searches
server-side with
?q=as you type instead of loading everything. Because the catalogue only contains voices your plan can use, avoice_idsaved in a published flow can start failing after a plan change — that is application code600/601/602, and the piece turns those into a message telling you to re-pick a voice. - Application codes are not HTTP codes. Alongside real statuses (
200,202,400,401,404,422,429) Unmixr returns its own codes in the 500–602 range, which the piece maps to plain messages:501the voice is OpenAI-compatible and needs your ownOpenAI-API-Keyheader (not sent by this piece — pick another voice),502text over 2,000 characters,504out of voice-cloning credits,505out of speech credits,508generation failed (not charged),600/601/602voice not API-enabled / unavailable / not in your plan. - The error body shape is inferred, not documented. Unmixr's docs print no error example.
Success bodies carry
successandcode, and the error table lists a numericcodewith amessage, so errors are most likely{"success": false, "code": N, "message": "..."}. The piece parses that shape defensively and falls back to the raw body and HTTP status when the expected fields are missing. - Rate limits are unpublished. Unmixr answers
429when you exceed them but documents no numbers, so every call retries up to three times with exponential backoff before failing. Only a429is retried — a rate-limited call is refused before anything is generated, so replaying it cannot charge twice, whereas a timed-out call may already have been billed. - Credits are charged per character, vary by voice, and only on success. Use Estimate
Credits to price a script for free before generating, and Get Credit Balance for the
remaining balance, the plan name and the plan's Long TTS limits (
max_text_length,max_paragraph_text_length,max_paragraphs,max_chapters). - No custom API call action. A passthrough would hand this connection's API key to any URL a flow supplies, and the endpoints people actually automate are covered above.
