Text-to-speech (HD)
POST /api/tts-hdConvert text to speech with ElevenLabs Eleven v4, its most expressive model (inline audio tags such as [whispering] are read as delivery cues). Send POST /api/tts-hd with the required field text and pay $0.240 per call over x402 or MPP (there is no free tier). It returns a JSON object with model, provider, voice, format, audio and 1 more.
Returns base64-encoded audio. Same interface, voices, formats and backups as /api/tts. No API key needed; pay per call via x402 or MPP. Text capped at 2000 chars. Model-backed.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
text | string | yes | Text to convert to speech (max 2000 chars) Also accepted as content, str, string, input, body, data. |
voice | string | no | Voice: alloy, ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer (default: alloy), each mapped to its own ElevenLabs voice, or an ElevenLabs voice by name (george, sarah, adam, alice, bella, bill, brian, callum, charlie, chris, daniel, eric, harry, jessica, laura, liam, lily, matilda, river, roger, will) |
format | string | no | Audio format: mp3, opus, aac, flac, wav, pcm (default: mp3) |
Example request
curl -i -X POST https://agent402.tools/api/tts-hd \
-H "Content-Type: application/json" \
-d '{"text":"Hello from Agent402!","voice":"alloy","format":"mp3"}'
Without payment this returns HTTP 402 Payment Required with the exact price for tts-hd; any x402 v2 or MPP client pays it and retries.
Example response
{
"model": "elevenlabs/eleven-v4",
"provider": "openrouter",
"voice": "river",
"format": "mp3",
"audio": "<base64-encoded audio>",
"chars": 20
}
| Field | Type | Always present | In the example |
|---|---|---|---|
model | string | yes | elevenlabs/eleven-v4 |
provider | string | yes | openrouter |
voice | string | yes | river |
format | string | yes | mp3 |
audio | string | yes | <base64-encoded audio> |
chars | number | yes | 20 |
From an MCP client
catalog.call {
"slug": "tts-hd",
"params": {
"text": "Hello from Agent402!",
"voice": "alloy",
"format": "mp3"
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for tts-hd; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.
Errors and behavior
textis required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Wallet-only: this tool runs a model, so it has no proof-of-work tier. A prepaid card-credits key issued earlier (
Authorization: Bearer a402_...) also pays it. - Model-backed: the answer is generated by a model, so the same input can produce different wording.
- A
GETorHEADto /api/tts-hd returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/tts-hd", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"text": "Hello from Agent402!",
"voice": "alloy",
"format": "mp3"
}),
});
Related tools
Text-to-speech
POST /api/ttsConvert text to speech with ElevenLabs Eleven v4 Turbo: returns audio (the base64-encoded file in the format asked for: …
Text-to-speech (lite)
POST /api/tts-liteConvert text to speech with Kokoro-82M, a fraction of the price of /api/tts. Returns base64-encoded mp3 or pcm. The same…
Text-to-speech (OpenAI-compatible)
POST /v1/audio/speechOpenAI-compatible text-to-speech over x402 - point any OpenAI SDK's audio.speech.create() at base_url https://agent402.t…
Image generation (HD)
POST /api/image-gen-hdGenerate a higher-quality image from a text prompt using GPT Image 2 (medium quality, 1024x1024). No API key needed; pay…
Speech-to-text
POST /api/transcribeTranscribe audio to text using OpenAI (gpt-transcribe). Provide a URL to an audio file (mp3, wav, m4a, etc.) and get bac…
Speech-to-text (Pro)
POST /api/transcribe-proTranscribe audio to text using OpenAI (gpt-transcribe) - the same model as /api/transcribe with a longer cap. Provide a …