1. claude mcp add runapi -s user -- npx -y @runapi.ai/mcp
2. 重启 Claude Code
3. 粘贴这个 prompt:生成音频:"[whispers] I never knew it could be this way, but I'm glad we're here."
1. codex plugin install runapi-mcp@agents
2. 重启 Codex
3. 粘贴这个 prompt:生成音频:"[whispers] I never knew it could be this way, but I'm glad we're here."
1. npx @runapi.ai/mcp init cursor
2. 重启 Cursor
3. 粘贴这个 prompt:生成音频:"[whispers] I never knew it could be this way, but I'm glad we're here."
1. npx @runapi.ai/mcp init windsurf
2. 重启 Windsurf
3. 粘贴这个 prompt:生成音频:"[whispers] I never knew it could be this way, but I'm glad we're here."
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[whispers] I never knew it could be this way, but I'm glad we're here."
}
JSON
import { ElevenlabsClient } from "@runapi.ai/elevenlabs";
const client = new ElevenlabsClient({
apiKey: process.env.RUNAPI_API_KEY,
});
const result = await client.textToSound.run({
"model": "text-to-speech-turbo-v2.5",
"text": "[whispers] I never knew it could be this way, but I'm glad we're here."
});
console.log(result.id);
require "runapi/elevenlabs"
client = RunApi::Elevenlabs::Client.new
result = client.text_to_sound.run(
model: "text-to-speech-turbo-v2.5",
text: "[whispers] I never knew it could be this way, but I'm glad we're here."
)
puts result.id
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader("{\"model\":\"text-to-speech-turbo-v2.5\",\"text\":\"[whispers] I never knew it could be this way, but I'm glad we're here.\"}")
req, err := http.NewRequestWithContext(context.Background(), http.MethodPost, "https://runapi.ai/api/v1/elevenlabs/text_to_sound", body)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("RUNAPI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}
text-to-speech-turbo-v2.5/api/v1/elevenlabs/text_to_sound获取 API Key
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[whispers] I never knew it could be this way, but I'm glad we're here."
}
JSON
[sorrowful] I couldn't sleep that night. The air was too still, and the moonlight kept sliding through the blinds like it was trying to tell me something. [quietly] And suddenly, that's when I saw it.
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[sorrowful] I couldn't sleep that night. The air was too still, and the moonlight kept sliding through the blinds like it was trying to tell me something. [quietly] And suddenly, that's when I saw it."
}
JSON
[tired] I've been working for 14 hours straight. [sigh] I can't even feel my hands anymore. [nervously] You sure this is going to work? [gulps] Okay… let's go.
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[tired] I've been working for 14 hours straight. [sigh] I can't even feel my hands anymore. [nervously] You sure this is going to work? [gulps] Okay… let's go."
}
JSON
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[laughing] Brooo—BROOO I don't know WHY that sent me!! [laughs harder] The chicken had NO PLOT, no twist, just raw determination!"
}
JSON
[frustrated sigh] I was seriously about to just trash the whole thing. And it was like... the FLOODGATES opened! It all just CLICKED. [happy gasp] I can't believe it actually worked.
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[frustrated sigh] I was seriously about to just trash the whole thing. And it was like... the FLOODGATES opened! It all just CLICKED. [happy gasp] I can't believe it actually worked."
}
JSON
[professional] Thank you for calling Tech Solutions. How can I help you today? [sympathetic] Oh no, I'm really sorry to hear you're having trouble. [reassuring] Alright, based on what you're describing, I think we can fix this quickly.
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[professional] Thank you for calling Tech Solutions. How can I help you today? [sympathetic] Oh no, I'm really sorry to hear you're having trouble. [reassuring] Alright, based on what you're describing, I think we can fix this quickly."
}
JSON
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "[strong French accent] Zat's life, my friend — you can't control everysing. [pause] But you can enjoy ze ride, non?"
}
JSON
curl -X POST https://runapi.ai/api/v1/elevenlabs/text_to_sound \
-H "Authorization: Bearer $RUNAPI_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "text-to-speech-turbo-v2.5",
"text": "You have three new messages and one upcoming meeting in fifteen minutes."
}
JSON